我是存储过程的新手。如何定义要在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
变量是我在存储过程开始时定义的输入。
答案 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)
之类的括号?