我试图将整个存储过程作为字符串执行,因为我必须使条件动态化。
这是我的代码:

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


通过ProductIDBrandID进行过滤是可选的(如果它们的值不为-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/

10-10 10:34