create table A(id varchar(10))
create table B(id varchar(10))declare @s1 as varchar(20)
declare @s2 as varchar(20)set @s1 = 'A,B,C,D,E'
set @s2 = 'C,E,F,G,H'declare @sql varchar(8000)set @sql='insert into A select '''+replace(@s1,',',''' union all select ''')+''''
exec( @sql )set @sql='insert into B select '''+replace(@s2,',',''' union all select ''')+''''
exec( @sql )select * from A where id not in (select id from B)
drop table A,B/*
id
----------
A
B
D(所影响的行数为 3 行)
*/
create table B(id varchar(10))declare @s1 as varchar(20)
declare @s2 as varchar(20)set @s1 = 'A,B,C,D,E'
set @s2 = 'C,E,F,G,H'declare @sql varchar(8000)set @sql='insert into A select '''+replace(@s1,',',''' union all select ''')+''''
exec( @sql )set @sql='insert into B select '''+replace(@s2,',',''' union all select ''')+''''
exec( @sql )select * from A where id not in (select id from B)
drop table A,B/*
id
----------
A
B
D(所影响的行数为 3 行)
*/
(name varchar(10))
insert into #t1
select 'A,B,C,D,E'
select top 100 id=identity(int,1,1) into # from sysobjectsdeclare @s1 varchar(100),@s2 varchar(100)
select @s1='A,B,C,D,E'
select @s2='C,E,F,G,H'
select * from
(
select
name=substring(a.name,b.id,charindex(',',a.name+',',b.id)-b.id)
from #t1 a ,# b
where substring(','+a.name,b.id,1)=','
)a
where charindex(','+name+',',','+@s2+',')=0
/*
name
----------
A
B
D(所影响的行数为 3 行)
*/
SELECT @s1 = 'A,B,C,D,E',@s2 = 'C,E,F,G,H',@s = ''SELECT @s1 = 'SELECT v=''' + REPLACE(@s1,',',''' UNION ALL SELECT ''') + '''',
@s2 = 'SELECT v=''' + REPLACE(@s2,',',''' UNION ALL SELECT ''') + '''',
@s = 'DECLARE @s VARCHAR(100);SELECT @s=ISNULL(@s+'','','''') + a.v FROM (' + @s1 + ') a LEFT JOIN (' + @s2 + ') b ON a.v=b.v WHERE b.v IS NULL;SELECT @s'
EXEC(@s)
create function test( @s nvarchar(100),@s2 nvarchar(100))
returns nvarchar(100)
as
begin
declare @a nvarchar(100)declare @T table(ID int identity,name nvarchar(100))insert @T select top 100 null from sysobjectsselect
@a=isnull(@a+',','')+Col
from
(select
[Col]=substring(t.COl,t2.ID,charindex(',',t.COl+',',t2.ID)-t2.ID)
from
(select @s as col)T
cross join
@T t2
where
substring(','+t.col,t2.ID,1)=','
)TT
where
not exists(select 1 where ','+@s2+',' like '%,'+tt.COl+',%')return @a
endgo
declare @s nvarchar(100),@s2 nvarchar(100)
select @s='A,B,C,D,E',@s2='C,E,F,G,H'select dbo.test(@s,@s2)----------------------------------------------------------------------------------------------------
A,B,D(所影响的行数为 1 行)
DECLARE @s1 VARCHAR(1000),@s2 VARCHAR(1000),@s VARCHAR(2000)
SELECT @s1 = 'A,B,C,D,E',@s2 = 'C,E,F,G,H',@s = ''SELECT @s1 = 'SELECT v=''' + REPLACE(@s1,',',''' UNION ALL SELECT ''') + '''',
@s2 = 'SELECT v=''' + REPLACE(@s2,',',''' UNION ALL SELECT ''') + '''',
@s = 'DECLARE @s VARCHAR(100);SELECT @s=ISNULL(@s+'','','''') + a.v FROM (' + @s1 + ') a LEFT JOIN (' + @s2 + ') b ON a.v=b.v WHERE b.v IS NULL;SELECT @s'
EXEC(@s)支持一下