Как определить переменную внутри запроса хранимой процедуры? - PullRequest
0 голосов
/ 23 апреля 2019

Я новичок в хранимых процедурах. Как я могу определить переменную для использования в запросе 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 ]

1 голос
/ 23 апреля 2019

Здесь будет хорошо работать предложение 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
0 голосов
/ 23 апреля 2019

Вы пытались добавить скобки, такие как (@Availability = 1)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...