日期:2014-05-18  浏览次数:20493 次

求一简单的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
*/