我有一个带有 nvarchar 参数的存储过程。我希望调用者在使用此 SP 时为 sql 命令提供文本。
如何从 SP 中执行提供的 sql 命令?
这甚至可能吗?
我认为使用 EXEC 是可能的,但如下:
EXEC @script
错误表明它无法找到给定名称的存储过程。由于它是一个脚本,这显然是准确的,但让我认为它没有按预期工作。
我有一个带有 nvarchar 参数的存储过程。我希望调用者在使用此 SP 时为 sql 命令提供文本。
如何从 SP 中执行提供的 sql 命令?
这甚至可能吗?
我认为使用 EXEC 是可能的,但如下:
EXEC @script
错误表明它无法找到给定名称的存储过程。由于它是一个脚本,这显然是准确的,但让我认为它没有按预期工作。
采用:
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 的诅咒和祝福。
您可以从您的 sp 中执行 @sqlStatement。不过,这不是最好的做法,因为它可以让您接受 sql 注入。你可以在这里看到一个例子
您使用EXECUTE
将命令作为字符串传递给它。请注意,鉴于很难验证您盲目执行的 SQL 语句的非恶意性,这可能会使您的系统面临严重的漏洞。
如何从 SP 中执行提供的 sql 命令?
很小心。该代码可以做任何事情,包括添加或删除记录,甚至是整个表或数据库。
为了安全起见,您需要创建一个单独的用户帐户,该帐户仅对一小部分允许的表/视图具有 dbreader 权限,并使用EXECUTE AS命令将上下文限制为该用户。