存储过程中: @MessageSendToDepartCode NVarChar (4000)此参数的值实际是这样的:1006,1008,1990,4666,3333
也有可能只有一个数,如: 2009现在我想这做:把这个参数以 "," 为分界,拆成数组,然后,把每个数字插入表 “message” 中,------------------------------------最后 表 messgae 中,就是这样的:ID messageCode2 1006
3 1008
4 1990
5 4666在存储过程中,要怎么写呢?
也有可能只有一个数,如: 2009现在我想这做:把这个参数以 "," 为分界,拆成数组,然后,把每个数字插入表 “message” 中,------------------------------------最后 表 messgae 中,就是这样的:ID messageCode2 1006
3 1008
4 1990
5 4666在存储过程中,要怎么写呢?
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
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)
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
@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
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 这两个是新的变量
如果不正確,最好能完整的寫出你的需求.