【发布时间】:2014-05-07 08:34:37
【问题描述】:
我想在 SQL Server 2012 中创建一个接受短语作为条件的存储过程。 我正在编写动态发送参数的报告。
该过程类似于以下内容,其中变量@WHERE 需要替换为我作为输入发送的字符串。
CREATE PROCEDURE [dbo].[TEST]
@WHERE NVARCHAR(200)
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM MTRL WHERE @WHERE
END
所以执行必须是这样的
execute TEST 'AND PRODUCT=3 AND DATE IS NULL'
我不想明确使用变量。例如,使用
WHERE PRODUCT=@PRODUCT AND DATE = @DATE AND NAME LIKE '%@NAME'
因为这可能会发生变化。根据用户的选择,同一报告的过滤器每次都不同。
我尝试通用解决方案时遇到的错误是
在预期条件的上下文中指定的非布尔类型表达式,靠近“END”。
【问题讨论】:
-
您提出的解决方案是等待发生的 SQL 注入攻击。除非您完全确定自己知道自己在做什么,否则不应这样做。
-
是的。很高兴提到这一点。应考虑使用存储过程的参数化输入
标签: sql sql-server stored-procedures sql-server-2012