求一简单的sql语句,在线等
一个字符串。
WEB,35;WEB,36;C323,2
我想把它查询成下面的一个表
Name ID
WEB 35
WEB 36
C323 2
------解决方案--------------------例如这样一个字符串1&30~10353&32~
"~ "代表一条记录, "& "代表字段值
有多少个不确定,就是说不一定就是两条
就是拆分后插入到表中
拆分后
insert into SYS_User_Role ( ROLE_ID,DEPARTMENT_ID ) values ( 1,30 )
insert into SYS_User_Role ( ROLE_ID,DEPARTMENT_ID ) values ( 10353,32 )
create table SYS_User_Role(ROLE_ID int,DEPARTMENT_ID int)
go
create procedure sp_test(@str varchar(8000))
as
begin
declare @n_str varchar(50)
while charindex( '~ ',@str)> 0
begin
set @n_str=replace(left(@str,charindex( '~ ',@str)-1), '& ', ', ')
set @str=stuff(@str,1,charindex( '~ ',@str), ' ')
exec( 'insert into SYS_User_Role(ROLE_ID,DEPARTMENT_ID) values( '+@n_str+ ') ')
end
end
go
exec sp_test '1&30~10353&32~ '
go
select * from SYS_User_Role
/*
ROLE_ID DEPARTMENT_ID
----------- -------------
1 30
10353 32
*/
go
drop procedure sp_test
drop table SYS_User_Role
go
------解决方案--------------------declare @str varchar(8000)
set @str= 'WEB,35;WEB,36;C323,2 '
set @str=replace(replace( 'select ' ' '+@str, '; ', ' ' ' union all select ' ' ') , ', ', ' ' ', ' ' ')+ ' ' ' '
select @str
exec(@str)
/*
----------------------------------------------------------------------------------------------------------------
select 'WEB ', '35 ' union all select ' WEB ', '36 ' union all select ' C323 ', '2 '
(所影响的行数为 1 行)
----- ----
WEB 35
WEB 36
C323 2
*/