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 行)
*/

解决方案 »

  1.   

    create table #t1
    (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 行)
    */
      

  2.   

    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)
      

  3.   


    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 行)
      

  4.   


    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)支持一下