我想在變量具有值的情況下執行WHERE子句的一部分。我曾嘗試以許多不同的方式寫這篇文章,但總是遇到錯誤,並想知道是否有人可以提供幫助。SQL:如果var =''不做任何其他的條件添加到WHERE子句
下面的代碼是我當前的SQL語句,但如果我的@itemId爲空,它將不會返回任何內容。如果將@itemId作爲值,我只想減少結果。
DECLARE @itemId nvarchar(max)
SET @itemId = 'someId'
SELECT
SalesOrdersItems.Id,
CASE
WHEN SalesOrderItems.ItemType = 'P' THEN Products.ProductId
WHEN SalesOrderItems.ItemType = 'S' THEN Sundries.SundryId
WHEN SalesOrderItems.ItemType = 'F' THEN FreightMethods.FreightMethodId
ELSE SalesOrderItems.FreeTextItem
END AS ItemId
FROM SalesOrderItems
LEFT OUTER JOIN Products ON SalesOrderItems.Product = Products.Product
LEFT OUTER JOIN Sundries ON SalesOrderItems.Sundry = Sundries.Sundry
LEFT OUTER JOIN FreightMethods ON SalesOrderItems.FreightMethod = FreightMethods.FreightMethod
WHERE
SalesOrdersItems.area LIKE 'SE%'
AND (Products.ProductId = @itemId OR Sundries.SundryId = @itemId OR FreightMethods.FreightMethodId = @itemId OR SalesOrderItems.FreeTextItem = @itemId)
我試過寫這樣的最後一行(見下面的代碼),但它不起作用。
AND CASE
WHEN @itemId = '' THEN 1
ELSE (Products.ProductId = @itemId OR Sundries.SundryId = @itemId OR FreightMethods.FreightMethodId = @itemId OR SalesOrderItems.FreeTextItem = @itemId)
END
有沒有人有任何想法,我哪裏出錯了?
是否有理由或不適合您的需求? AND(@itemID =''OR(...)) – billinkc
不會解決問題,但考慮使用表格的別名,它可以幫助減少混亂 – Beef