我有一個包含一個逗號分隔的是,在我的SELECT語句中的一列整數列表中的VARCHAR輸入變量。我知道如何分割的列表,並使用在where子句中,例如:SQL爲包括基於列表中輸入變量或行中的所有行,如果變量是空
DECLARE @ListOfAges Varchar
SET @ListOfAges = '15,20,25'
select p.Name, a.Age
from People p
left join Ages a on p.AgeKey = a.AgeKey
Where a.Age in (dbo.Split(@ListOfAges))
我想要做的是,如果@ListOfAges var爲空,選擇一切,所以是這樣的:
select p.Name, a.Age
from People p
left join Ages a on p.AgeKey = a.AgeKey
Where (@ListOfAges = null OR a.Age in (dbo.Split(@ListOfAges)))
這是有辦法做到這一點,執行得更好?可能沒有在WHERE子句中使用IN子句?我不確定是否可以在連接中包括這個,或者建議採用完全不同的方法(例如不使用逗號分隔的輸入變量)。
謝謝!
當用(in in(15,20,25)''替換in(dbo.Split(@ListOfAges))'時,性能如何?它實質上更好嗎?這是您可以通過消除分割而無需其他操作來實現的性能上限。如果這種表現不可接受,那麼您可能需要查看是否還有其他需要優化的內容。 – dasblinkenlight