如何在sql server中查找逗号分隔字符串集合中是否存在字符串?

如何在sql server中查找逗号分隔字符串集合中是否存在字符串?,sql,sql-server,Sql,Sql Server,我想知道sql中的字符串集合中是否存在字符串。 给定的代码总是返回false。有人能告诉我哪里错了吗 alter procedure is_exception_user @usrid varchar(100) as begin if @usrid in ('abc,xyz') SELECT 'TRUE' ELSE SELECT 'FALSE' END exec is_exception_user 'xyz' 这就是你想要的逻辑吗 if @usrid in ('abc', 'xyz')

我想知道sql中的字符串集合中是否存在字符串。 给定的代码总是返回false。有人能告诉我哪里错了吗

alter procedure is_exception_user @usrid varchar(100)
as
begin
if @usrid in ('abc,xyz')
SELECT 'TRUE'
ELSE 
SELECT 'FALSE'
END

exec is_exception_user 'xyz'

这就是你想要的逻辑吗

if @usrid in ('abc', 'xyz')
    select 'TRUE'
else 
    select 'FALSE';
或者更简单地说:

select (case when @usrid in ('abc', 'xyz') then 'TRUE' else 'FALSE' END)
你可以做:

IF ',' + 'abc,xyz' + ',' LIKE '%,' + @usrid + ',%'
BEGIN
  SELECT 'TRUE';
END
在比较的两侧使用前导逗号和尾随逗号的技巧有两个目的:(1)确保“12”与“34124”不匹配;(2)在字符串的开头和结尾处找到要查找的逗号

我是这样写的:

',' + 'abc,xyz' + ','
因为我假设您不会在过程中硬编码那个逗号分隔的大字符串,而是从列或变量派生出来

在SQL Server 2016中,您可以改为执行以下操作:

IF @usrid IN (SELECT Value FROM STRING_SPLIT('abc,xyz', ','))
BEGIN
  SELECT 'TRUE';
END
或者首先将值存储在表结构中:

DECLARE @values TABLE(Value varchar(32) PRIMARY KEY);
INSERT @values VALUES('abc','xyz');

IF @usrid IN (SELECT Value FROM @values)
BEGIN
  SELECT 'TRUE';
END

在SQLServer中,单个值集比任何类型的字符串或其他包含多个值的结构都要好得多。每一条数据都应该是它自己的事实。为了方便起见将它们结合在一起会在某些方面带来麻烦。

什么版本的SQL Server?