select * from tb where charindex(','+ltrim(id)+',',','+'1,2,3'+',')>0
---2000的话 /*--化解字符串不能超过8000的方法 经常有人提到,用动态生成SQL语句的方法处理数据时,处理语句超长,无法处理的问题 下面就讨论这个问题: --邹建 2003.9(引用请保留此信息)--*/ --方法1. 多个变量处理 --根据查询结果定义变量(实际处理中,应该是估计需要多少个变量,定义足够多的变量个数,多定义变量并不影响处理,下面就多定义了一个) --生成数据处理临时表 SELECT id=IDENTITY(int,0,1), g=0, a=CAST(N ', '+QUOTENAME([name]) +N '=SUM(CASE [name] WHEN N '+QUOTENAME(name,N ' ' ' ') +N ' THEN [colid] ELSE 0 END) ' as nvarchar(4000)) INTO # FROM syscolumns WHERE name> N ' ' GROUP BY name --分组临时表 UPDATE a SET G=id/i FROM # a,(SELECT i=3800/MAX(LEN(a)) FROM #)b SELECT MAX(g)+1 as N '需要的变量个数 ' FROM # DECLARE @0 nvarchar(4000),@1 nvarchar(4000),@2 nvarchar(4000),@3 nvarchar(4000),@4 nvarchar(4000) SELECT @0=N ' ',@1=N ' ',@2=N ' ',@3=N ' ',@4=N ' ' SELECT @0=CASE g WHEN 0 THEN @0+a ELSE @0 END, @1=CASE g WHEN 1 THEN @1+a ELSE @1 END, @2=CASE g WHEN 2 THEN @2+a ELSE @2 END, @3=CASE g WHEN 3 THEN @3+a ELSE @3 END, @4=CASE g WHEN 4 THEN @4+a ELSE @4 END FROM # EXEC(N 'SELECT xtype '+@0+@1+@2+@3+@4+N ' FROM syscolumns GROUP BY xtype ') DROP TABLE # /*--方法说明 优点:比较灵活,数据量大时只需要增加变量就行了.不用改动其他部分 缺点:要自行估计处理的数据,估计不足就会出错 --*/ 参考!不过貌似 in 就能解决了。
declare @s varchar(50) set @s='1,2,3'--1. exec('select * from tb where id in('+@s+')')--2. select * from tb where ','+@s+',' like '%,'+ltrim(id)+',%' or select * from tb where charindex(','+ltrim(id)+',',','+@s+',')>0
from tb
where charindex(','+ltrim(id)+',',','+'1,2,3'+',')>0
/*--化解字符串不能超过8000的方法 经常有人提到,用动态生成SQL语句的方法处理数据时,处理语句超长,无法处理的问题
下面就讨论这个问题:
--邹建 2003.9(引用请保留此信息)--*/
--方法1. 多个变量处理 --根据查询结果定义变量(实际处理中,应该是估计需要多少个变量,定义足够多的变量个数,多定义变量并不影响处理,下面就多定义了一个)
--生成数据处理临时表
SELECT id=IDENTITY(int,0,1),
g=0,
a=CAST(N ', '+QUOTENAME([name])
+N '=SUM(CASE [name] WHEN N '+QUOTENAME(name,N ' ' ' ')
+N ' THEN [colid] ELSE 0 END) '
as nvarchar(4000))
INTO # FROM syscolumns
WHERE name> N ' '
GROUP BY name --分组临时表
UPDATE a SET G=id/i
FROM # a,(SELECT i=3800/MAX(LEN(a)) FROM #)b
SELECT MAX(g)+1 as N '需要的变量个数 ' FROM # DECLARE @0 nvarchar(4000),@1 nvarchar(4000),@2 nvarchar(4000),@3 nvarchar(4000),@4 nvarchar(4000)
SELECT @0=N ' ',@1=N ' ',@2=N ' ',@3=N ' ',@4=N ' '
SELECT
@0=CASE g WHEN 0 THEN @0+a ELSE @0 END,
@1=CASE g WHEN 1 THEN @1+a ELSE @1 END,
@2=CASE g WHEN 2 THEN @2+a ELSE @2 END,
@3=CASE g WHEN 3 THEN @3+a ELSE @3 END,
@4=CASE g WHEN 4 THEN @4+a ELSE @4 END
FROM #
EXEC(N 'SELECT xtype '+@0+@1+@2+@3+@4+N ' FROM syscolumns GROUP BY xtype ')
DROP TABLE # /*--方法说明 优点:比较灵活,数据量大时只需要增加变量就行了.不用改动其他部分
缺点:要自行估计处理的数据,估计不足就会出错
--*/ 参考!不过貌似 in 就能解决了。
declare @s varchar(50)
set @s='1,2,3'--1.
exec('select * from tb where id in('+@s+')')--2.
select * from tb where ','+@s+',' like '%,'+ltrim(id)+',%'
or
select * from tb where charindex(','+ltrim(id)+',',','+@s+',')>0
全部说光了 还有个partindex