我有一个用于选择行的存储过程。我想传递一个参数来动态过滤行,如下所示:
Create Procedure CustomerSelectAll
@FilterExpresion NVARCHAR(MAX)
DECLARE @CMD NVARCHAR(MAX)
SET @CMD = N'SELECT * FROM dbo.Customers '+@FilterExpresion;
EXEC(@CMD)
上面的代码工作正常,但它有SQL注入的风险,所以我希望能够使用任何WHERE语句传递多个列,例如:
exec CustomerSelectAll
@FilterExpresion = N' where Name = 'abc' and family = ''xyz'''
答案 0 :(得分:0)
我不知道你是否可以将整个where子句作为参数传递。但是从我所拥有的少量知识中,我可以建议你使用sql parser来查看where子句是否只有select语句和如果答案是肯定的,那么您可以将where子句传递给存储过程。希望这有一些帮助。