如何在存储过程查询中定义变量?

时间:2019-04-23 12:13:18

标签: sql sql-server stored-procedures

我是存储过程的新手。如何定义要在sql查询中使用的变量?这是我的代码,但是当我运行此存储过程时,出现此错误:

  

在上下文中指定的非布尔类型的表达式,其中   状况可能在“或”附近。

这是我的代码:

 declare @sql nvarchar(MAX)
    Declare @availabilityStatus nvarchar(MAX)
    BEGIN
            IF @Availability = 1
                set @availabilityStatus = '0 or 1 or 2'
            ELSE
                set @availabilityStatus = '1'
            set @sql = 
                'SELECT Distinct P.ProductId, P.BrandId, P.[' + @OrderIndex + ']  FROM Products P INNER JOIN ProductStores PS ON P.ProductId = PS.ProductId ' +
                'Where PS.StoreId = @StoreId and (PS.Status = ' + @availabilityStatus + 'or PS.AvailabilityRank < '

@Availability变量是我在存储过程开始时定义的输入。

2 个答案:

答案 0 :(得分:1)

IN子句在这里可以很好地工作,因为它既适用于单个值,又适用于逗号分隔的值列表。

CREATE PROC YourProcName (@Availability int) 
AS

declare @sql nvarchar(MAX)
Declare @availabilityStatus nvarchar(MAX)

BEGIN
IF @Availability = 1
   set @availabilityStatus = '0, 1, 2'
ELSE
   set @availabilityStatus = '1'

set @sql = 'SELECT Distinct P.ProductId, P.BrandId, P.[' + @OrderIndex + ']  FROM Products P INNER JOIN ProductStores PS ON P.ProductId = PS.ProductId ' + 'Where PS.StoreId = @StoreId and PS.Status IN (' + @availabilityStatus + ') or PS.AvailabilityRank < ' -- the rest of your @sql code

-- the rest of your code
END
GO

答案 1 :(得分:-3)

您是否尝试过添加(@Availability = 1)之类的括号?