可以用存储过程做:
首先建立一个临时表,只有一个字段,用于保存拆分之后的字符串。
字符串的拆分:用charindex()函数,查找‘,’然后用left()提取。insert into 插入临时表。
然后用游标结合charindex()函数查找是否在@str中出现。
首先建立一个临时表,只有一个字段,用于保存拆分之后的字符串。
字符串的拆分:用charindex()函数,查找‘,’然后用left()提取。insert into 插入临时表。
然后用游标结合charindex()函数查找是否在@str中出现。
解决方案 »
- 求一条高效查询语句写法
- 求一高效SQl
- SQLServer 2005 Trigger Questions
- 再请高手进来,刚才问的“如何修改表的字段...”已经结贴,再次谢谢了。
- 关于SQL Server触发器的问题
- VB6.0执行Select操作后结果集rs的movenext报错-2147467259
- 刚下载的sp4安装不上,说要先安装Analysis Services
- 怎么样才能结结贴
- 用什么方法来获得一个表中的主键信息
- 事务隔离中的可重复读和串行化是什么意思?。在sql2000中事务的锁定方式是自动给定的,可不可以手工设定
- 为什么我连接局域网中的SQL Server2000??
- 怎么在Sql Server中怎么查找出各表之间关联主键、外键?
@s1 varchar(30),@s2 varchar(30),@s3 varchar930),
@i int,@j int
select @i=charindex(',',@str1)
select @s1=left(@str1,@i-1)其它的自己弄吧。
其实原理和vb中写带码是一样的,只不过sql server中不支持数组,所以用临时表。
游表的作用就相当于带码中的循环。
insert 你的表 values('aada,bbbf,ccc')
insert 你的表 values('ddd,aaaaaa,fdsa')
insert 你的表 values('vvvvvv,aaabbbb')create table #临时表(a varchar(100))
declare @aaa varchar(8000)
set @aaa='insert #临时表 select * from (select '''+replace(@str,',','''as str union all select ''')+''') a'
exec(@aaa)select * from 你的表 where exists (select 1 from #临时表 where ','+你的表.classid+',' like '%,'+a+',%')
godrop table 你的表,#临时表
id varchar(10))
declare @str varchar(300)
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
declare @i int
declare @len int
set @i = 1
set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'+','
while @i < len(@str)
begin
insert #t select substring(@str,@i,charindex(',',@str,@i)-@i)
set @i = charindex(',',@str,@i)+1
end
select * from 数据表 A,#t B where charindex(B.id, A.classid) > 0
insert t values('aada,bbbf,ccc')
insert t values('ddd,aaaaaa,fdsa')
insert t values('vvvvvv,aaabbbb')
declare @str varchar(500)set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'select top 500 identity(int,1,1) as id into #t from sysobjects select distinct A.* from t A,
( select substring(','+string+',',id+1,charindex(',',','+string+',',id+1)-id-1) as string
from (select @str as string) B,#t c
where substring(','+string+',',id,8000) like ',_%') D
where charindex(','+string+',',','+classid+',')>0drop table #t把#t建成固定表,更快。
select A.* from t A where exists
(select 1 from
( select substring(','+string+',',id+1,charindex(',',','+string+',',id+1)-id-1) as string
from (select @str as string) B,#t c
where substring(','+string+',',id,8000) like ',_%') D
where charindex(','+string+',',','+classid+',')>0 )drop table #t