我找了类似于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