我试图将整个存储过程作为字符串执行,因为我必须使条件动态化。
这是我的代码:
CREATE PROCEDURE SP1
(@VoucherType varchar(10),
@ProductID bigint,
@BrandID bigint)
AS
BEGIN
DECLARE @Condition as varchar(300)
SET @Condition=' WHERE VoucherType=@VoucherType '
IF (@ProductID<>-1)
BEGIN
SET @Condition=@Condition+' AND ProductID='+cast(@ProductID as varchar)
END
IF (BrandID<>-1)
BEGIN
SET @Condition=@Condition+' AND BrandID='+cast(@BrandID as varchar)
END
EXEC('SELECT * FROM Products '+@Condition)
END
通过
ProductID
和BrandID
进行过滤是可选的(如果它们的值不为-1,则将这些条件添加到where子句中)。并且必须通过VoucherType进行过滤。问题是我无法在线获取参数@VoucherType
的值:SET @Condition=' WHERE VoucherType=@VoucherType '
该错误表明没有名称为SI的列(这是我输入的
@VoucherType
)。我如何获得该参数的值。
最佳答案
不用动态SQL就可以做到:
SELECT * FROM Products WHERE VoucherType=@VoucherType AND
(@ProductID=-1 OR ProductID=@ProductID)
AND
(@BrandID=-1 OR BrandID=@BrandID)
关于sql - 在exec()中使用varchar参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19929763/