我找了類似於C#操作符的功能:http://msdn.microsoft.com/en-US/library/ty67wk28(v=vs.80)TSQL:操作功能
我需要基於兩個參數應用到過濾的服務器端數據:??
@CountryIDs - 這是逗號分隔值列表,例如'27,28,81' - 意思是國家代碼27,國家代碼28和國家代碼81
@關鍵字匹配客戶名稱。
有時候我不想提供應選擇CountryIDs的完整列表,而是我想要的一切選擇 - 有點像「 」 我創建了一個自定義函數「CSV2Table_fn」這使我可以提供像CountryID這樣的CSV列表。
DECLARE @CountryIDs nvarchar(4000), @Keyword nvarchar(50)
SET @CountryIDs = '25,28,81'
SET @Keyword = null
if (len(@Keyword) > 0) -- search for names matching keyword
begin
SELECT Name, CountryID FROM Company
WHERE CountryID IN (
SELECT DISTINCT ItemValue FROM CSV2Table_fn(
ISNULL((SELECT
CASE WHEN (SELECT COUNT(*) FROM (SELECT DISTINCT ItemValue FROM CSV2Table_fn(@CountryIDs,',')) t) > 0 THEN @CountryIDs
ELSE null
END
),CountryID),',')
)
AND Name LIKE '%' + @Keyword + '%'
end
else -- no keyword provided
begin
SELECT Name, CountryID FROM Company
WHERE CountryID IN (
SELECT DISTINCT ItemValue FROM CSV2Table_fn(
ISNULL((SELECT
CASE WHEN (SELECT COUNT(*) FROM (SELECT DISTINCT ItemValue FROM CSV2Table_fn(@CountryIDs,',')) t) > 0 THEN @CountryIDs
ELSE null
END
),CountryID),',')
)
end
- 編輯:代碼現在作爲應該。然而,這不是很乾淨,而且可能會進行優化。
見http://stackoverflow.com/questions/11291639/where-that-選擇 - 所有的建議不這樣做。 – GSerg
@CountryIDs變量不是來自客戶端,所以我不相信它應該是一個問題? – Sha
你現在有什麼建議作爲這個問題的正確解決方案,而不是嘗試寫一個'where'。 – GSerg