我有一个带有nvarchar参数的存储过程。我希望调用者在使用此SP时为sql命令提供文本。
如何从SP中执行提供的sql命令?
这甚至可能吗? -
我认为可以使用EXEC,但以下内容:
EXEC @script
错误表明它无法按给定名称查找存储过程。由于它是一个脚本,这显然是准确的,但让我觉得它没有按预期工作。
答案 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>