我正在寻找类似于 C# 运算符的功能?:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator
我需要根据两个参数过滤服务器端的数据:
@CountryIDs - 这是逗号分隔值的列表,例如 '27,28,81' - 表示 CountryID 27、CountryID 28 和 CountryID 81
@Keyword 匹配客户名称。
有时我不想提供应选择的 CountryID 的完整列表,而是希望选择所有内容 - 有点像“ 。 ”我创建了一个自定义函数“CSV2Table_fn”,它允许我提供 CSV 的列表CountryID。
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
- 编辑:代码现在按预期工作。然而,这不是很干净,可能会被优化。