2

我有一个带有 nvarchar 参数的存储过程。我希望调用者在使用此 SP 时为 sql 命令提供文本。

如何从 SP 中执行提供的 sql 命令?

这甚至可能吗?

我认为使用 EXEC 是可能的,但如下:

EXEC @script

错误表明它无法找到给定名称的存储过程。由于它是一个脚本,这显然是准确的,但让我认为它没有按预期工作。

4

4 回答 4

8

采用:

BEGIN

  EXEC sp_executesql @nvarchar_parameter

END

...假设参数是整个 SQL 查询。如果不:

DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT ...' + @nvarchar_parameter

BEGIN

  EXEC sp_executesql @SQL

END

注意SQL 注入攻击,我强烈推荐阅读动态 SQL 的诅咒和祝福

于 2010-02-18T02:24:37.423 回答
0

您可以从您的 sp 中执行 @sqlStatement。不过,这不是最好的做法,因为它可以让您接受 sql 注入。你可以在这里看到一个例子

于 2010-02-18T02:23:21.513 回答
0

您使用EXECUTE将命令作为字符串传递给它。请注意,鉴于很难验证您盲目执行的 SQL 语句的非恶意性,这可能会使您的系统面临严重的漏洞。

于 2010-02-18T02:24:05.677 回答
0

如何从 SP 中执行提供的 sql 命令?

很小心。该代码可以做任何事情,包括添加或删除记录,甚至是整个表或数据库。

为了安全起见,您需要创建一个单独的用户帐户,该帐户仅对一小部分允许的表/视图具有 dbreader 权限,并使用EXECUTE AS命令将上下文限制为该用户。

于 2010-02-18T02:25:08.610 回答