存储过程中:    @MessageSendToDepartCode NVarChar (4000)此参数的值实际是这样的:1006,1008,1990,4666,3333 
也有可能只有一个数,如: 2009现在我想这做:把这个参数以 "," 为分界,拆成数组,然后,把每个数字插入表 “message” 中,------------------------------------最后 表  messgae 中,就是这样的:ID   messageCode2    1006
3    1008
4    1990
5    4666在存储过程中,要怎么写呢?

解决方案 »

  1.   

    T-SQL没有Split之类的函数,需要自己拆解
      

  2.   

    create table messgae(id int(identity,1,1),messageCode nvarchar(50))
    go
    create proc split_proc
     @MessageSendToDepartCode NVarChar (4000)
    as
    declare @tempstr nvarchar(50)
    set @tempstr=@MessageSendToDepartCode
    while charindex(',',@tempstr)>0
    begin
      set @tempstr=left(@MessageSendToDepartCode,charindex(',',@tempstr)-1)
      insert into message(messageCode) values(@tempstr)
      set @tempstr=stuff(@MessageSendToDepartCode,1,charindex(',',@tempstr),'')
    end
     insert into message(messageCode) values(@tempstr)
    go
      

  3.   

    create table messgae(ID int identity, messageCode varchar(10))
    godeclare @MessageSendToDepartCode NVarChar (4000), @sql varchar(8000)
    select @MessageSendToDepartCode='1006,1008,1990,4666,3333', @sql=' insert messgae(messageCode) select '
    select @sql=@sql+replace(@MessageSendToDepartCode, ',', ' union all select ')
    exec(@sql)
    select * from messgae--result
    ID          messageCode 
    ----------- ----------- 
    1           1006
    2           1008
    3           1990
    4           4666
    5           3333(5 row(s) affected)
      

  4.   

    没调试,修改一下:
    create table message(id int identity(1,1),messageCode nvarchar(50))
    gocreate proc split_proc
     @MessageSendToDepartCode NVarChar (4000)
    as
    declare @tempstr nvarchar(50)
    while charindex(',',@MessageSendToDepartCode)>0
    begin
      set @tempstr=left(@MessageSendToDepartCode,charindex(',',@MessageSendToDepartCode)-1)
      insert into message(messageCode) values(@tempstr)
      set @MessageSendToDepartCode=stuff(@MessageSendToDepartCode,1,charindex(',',@MessageSendToDepartCode),'')
    end
     insert into message(messageCode) values(@MessageSendToDepartCode)
    goexec split_proc 'abcdfdf'
    go
    select * from message
    go
      

  5.   

    create procedure mestodepartcode 
        @MessageSendToDepartCode NVarChar (4000)
    as
    declare @message table (id int identity(1,1),messagecode nvarchar(100))
    declare @i1 int,@i2 int
    select @i1=1
    while (1=1)
    begin
       select @i2=charindex(',',@messagesendtodepartcode,@i1)
       if @i2>0 
       begin
          insert into @message (messagecode) values (substring(@messagesendtodepartcode,@i1,@i2-@i1))
          set @i1=@i2+1
       end
       else
       begin
    insert into @message(messagecode) values(substring(@messagesendtodepartcode,@i1,len(@messagesendtodepartcode)-@i1+1))
            break
       end
       
    endselect * from @message
      

  6.   


    marco08(天道酬勤):老大:你的方法很好,很简洁清晰,可是有一个地方我有点不明白create table messgae(ID int identity, messageCode varchar(10))
    godeclare @MessageSendToDepartCode NVarChar (4000), @sql varchar(8000)
    select @MessageSendToDepartCode='1006,1008,1990,4666,3333', @sql=' insert messgae(messageCode) select '
    select @sql=@sql+replace(@MessageSendToDepartCode, ',', ' union all select ')
    exec(@sql)------------------就是这句:@sql=' insert messgae(messageCode) select '如果我想多插入几个字段,比如:@sql=' insert messgae(MessageID,MessageUsermessageCode) select '那后面要如何对应上变量啊我这样试过了,好像不对啊?!@sql=' insert messgae(MessageID,MessageUser,messageCode) @MID,@MUser,select '@MID,@MUser 这两个是新的变量
      

  7.   

    try@sql=' insert messgae(MessageID,MessageUser,messageCode) select ' + Rtrim(@MID) + ',' + @MUser + ','
    如果不正確,最好能完整的寫出你的需求.
      

  8.   

    paoluo(一天到晚游泳的鱼) :多谢帮忙!我的意思就是能同时插入多个字段,不然的话,只插入一个字段没有意义啊