如何执行作为sp参数传递的sql文本?

时间:2010-02-18 02:19:21

标签: sql sql-server sql-server-2005 tsql dynamic-sql

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

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

这甚至可能吗? -

我认为可以使用EXEC,但以下内容:

EXEC @script

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

4 个答案:

答案 0 :(得分: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 Injection attacks,我强烈建议您阅读The curse and blessing of Dynamic SQL

答案 1 :(得分:0)

你可以在sp中执行@sqlStatement。虽然,它不是最好的事情,因为它打开你的SQL注入。您可以看到示例here

答案 2 :(得分:0)

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

答案 3 :(得分:0)

  

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

非常仔细。该代码可以执行任何操作,包括添加或删除记录,甚至整个表或数据库。

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