有没有人知道从另一个存储过程中将文本附加到存储过程的方法?我想在SQL Server 2005中执行以下操作:
Declare str as Nvarchar(Max) = ''
set @spStr = dbo.spTest + 'Where testCol1 = ''Test'''
exec(@spStr)
据我所知,这可能会引发一些关于SQL注入攻击的讨论。我只是想通过以上述方式动态地传递一个where子句来查看语法是否存在扩展存储过程。
答案 0 :(得分:3)
在Sql Server的任何版本中都没有这样的语法。你有几个选择:
显然,您可以修改过程以包含过程代码本身将在过程调用中返回结果集的最终语句中作为过滤器处理的参数。虽然我建议反对它,你当然可以有一个参数,它只是一个varchar / nvarchar数据类型,其中包含你想要添加的实际'where'子句,并让程序代码将它附加到这些最终的select语句中
使用insert/exec syntax使用存储过程执行的结果填充临时表,然后只针对该临时表运行筛选选择。
答案 1 :(得分:2)
有一些选择。
您可以使用INFORMATION_SCHEMA.ROUTINES中的元数据更改实际的SP(不是我认为您想要做的事情)
您可以参数化SP - 如果SP直接使用变量而不动态生成SQL,则不应该容易受到注入。
您可以考虑使用视图或内联或多步表值函数,它可以像参数化视图一样使用(内联更高效) - SELECT * FROM udf_Test WHERE TestCol1 = 'Test'
。
您可以获取SP的结果并将它们放在临时表或表变量中并对其进行查询。