A
ApplyID    DeviceID    DeviceName     DeviceNum   DeviceNO
---------- ----------- ----------------------------------------
5443       6           高端配置        2          AA0001,BB0001
5444       7           高端配置        3          BB0002,CC0001,CC0002B
DeviceNO                                           DeviceName           
-------------------------------------------------- ---------------------
AA0001                                             高配置笔记本         
AA0002                                             低配置笔记本         
BB0001                                             高配置台式机         
BB0002                                             低配置台式机         
CC0001                                             彩色打印机           
CC0002                                             一般打印机C
DeviceNO              DeviceID    ApplyUseID  ApplyReturnID
------------         ----------- ----------- -------------
AA0001                     6         5443         null
BB0001                    6          5443         nullBB0002                     7         5444          null
CC0001                     7         5444          null
CC0002                     7         5444          null
将A表与B表有关联的数复制到C表中 结果如C表所示(注A表中DeviceNO字段不固定)

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/5594/5594923.xml?temp=.3230402
    有人这样写了,但我测试了下不对的,
    我说了DeviceNO的字段是不固定的,没有一定的规则的
      

  2.   

    --查詢
    Select 
    B.DeviceNO,
    A.DeviceID,
    A.ApplyID,
    null As ApplyReturnID
    From
    A
    Inner Join
    B
    On CharIndex(B.DeviceNO, A.DeviceNO) > 0--插入
    Insert C
    Select 
    B.DeviceNO,
    A.DeviceID,
    A.ApplyID,
    null As ApplyReturnID
    From
    A
    Inner Join
    B
    On CharIndex(B.DeviceNO, A.DeviceNO) > 0
      

  3.   

    测试不正确
    因为你的那种方法在DeviceNO有不固定的,如1CC0001  就不对了
      

  4.   

    select b.DeviceNO,a.DeviceID,a.ApplyUseID,null ApplyReturnID
    from a join b on charindex(','+b.DeviceNO+',',','+a.DeviceNO+',')>0ApplyReturnID为什么是null
      

  5.   

    a.DeviceNO 里的NO~不一定是b.Device~NO里的NO吗
      

  6.   

    Create Table A
    (ApplyID Char(4),
     DeviceID Int,
     DeviceName Nvarchar(20),
     DeviceNum Int,
     DeviceNO Varchar(100))
    Insert A Select '5443',       6,           N'高端配置',        2,          'AA0001,BB0001'
    Union All Select '5444',       7,           N'高端配置',        3,          'BB0002,CC0001,CC0002'Create Table B
    (DeviceNO Varchar(20),
     DeviceName Nvarchar(50))
    Insert B Select 'AA0001',                                             N'高配置笔记本'         
    Union All Select 'AA0002',                                             N'低配置笔记本'         
    Union All Select 'BB0001',                                             N'高配置台式机'         
    Union All Select 'BB0002',                                             N'低配置台式机'         
    Union All Select 'CC0001',                                             N'彩色打印机'           
    Union All Select 'CC0002',                                             N'一般打印机'Create Table C
    (DeviceNO Varchar(20),
     DeviceID Int,
     ApplyUseID Char(4),
     ApplyReturnID Varchar(10))
    GO
    --插入
    Insert C
    Select 
    B.DeviceNO,
    A.DeviceID,
    A.ApplyID,
    null As ApplyReturnID
    From
    A
    Inner Join
    B
    On CharIndex(B.DeviceNO, A.DeviceNO) > 0Select * From C
    GO
    Drop Table A, B, C
    --Result
    /*
    DeviceNO DeviceID ApplyUseID ApplyReturnID
    AA0001 6 5443 NULL
    BB0001 6 5443 NULL
    BB0002 7 5444 NULL
    CC0001 7 5444 NULL
    CC0002 7 5444 NULL
    */
      

  7.   


    这是我同事做的分三种情况,但还是不简单declare @values varchar(100);
    declare @index int;
    set @values='';
    分三种情况
    select @values = @values+','+ DeviceNO from Asset_Apply_Use_Details where ApplyID=  5417  --一种
    SET @values = 'AB0004';    --二种
    SET @values = ',AA0002,CC0001,CC0002,BB0001,BB0002';  --三种while(len(@values)>0)
    begin
    set @index = patindex('%,%',@values)
    --此处执行插入操作
    --如果没有逗号,直接插入数据库
    if(@index=0)
    print @values;
    else
    print left(@values,@index-1);
    if(@index=0)
    set @values='';
    else
    begin
    set @values=right(@values,len(@values)-@index);
    end
    end
      

  8.   

    cefriend(青草) ( ) 信誉:100    Blog   加为好友  2007-06-12 15:13:44  得分: 0  
     
     
       测试不正确
    因为你的那种方法在DeviceNO有不固定的,如1CC0001  就不对了
      
     
    ----------
    明白了,這麼修改下
    --查詢
    Select 
    B.DeviceNO,
    A.DeviceID,
    A.ApplyID,
    null As ApplyReturnID
    From
    A
    Inner Join
    B
    On CharIndex(',' + B.DeviceNO + ',', ',' + A.DeviceNO + ',') > 0--插入
    Insert C
    Select 
    B.DeviceNO,
    A.DeviceID,
    A.ApplyID,
    null As ApplyReturnID
    From
    A
    Inner Join
    B
    On CharIndex(',' + B.DeviceNO + ',', ',' + A.DeviceNO + ',') > 0
      

  9.   

    a.DeviceNO 里的NO~不一定是b.Device~NO里的NO吗
    我没有这么说哦
      

  10.   

    测试不正确
    因为你的那种方法在DeviceNO有不固定的,如1CC0001  就不对了
    -------------------------
    1CC0001如果在b.DeviceNO~~没有~~是不会出来的。~~~所以你之前要在b表里有这样一条
      

  11.   

    w75251455(砍破) , 你理解錯了。 :)“1CC0001”中包含了“CC0001”,所以我上面的語句查詢出來的結果有問題。要改為下面的。
      

  12.   

    呵,呵,没想到charindex还有这种用法,以前看到过,没仔细用过,谢谢了
      

  13.   

    汗!~~鱼~~~你太不了心了....    T_T
    ~~~主要LZ是我同学~所以我会把他住笨的地方想
      

  14.   

    把<往>打成<住>了....
      

  15.   

    w75251455(砍破) ( ) 信誉:100    Blog   加为好友  2007-6-12 15:32:47  得分: 0  
     
     
       
    汗!~~鱼~~~你太不了心了....    T_T
    ~~~主要LZ是我同学~所以我会把他住笨的地方想  
     
    ------------我看到他的編碼是“AA0001,BB0001”,以為他的編碼是有規則的,那就可以不用加“,”的,沒想到他的編碼是沒有規則的。
      

  16.   

    原来如此。-----------------------------------------
    我靠~~一分都不给我~~~~回去灭了你NND
      

  17.   

    ▄︻┻┳═一   -     -     -  cefriend (青草)