22,210
社区成员
发帖
与我相关
我的任务
分享
select Data=substring(Data,number,charindex(',',Data+',',number)-number), Test.name from Test,master..spt_values
WHERE type='P' and substring(','+Data,number,1)=','
Create Table Test
(
Data Varchar(30),
Name Varchar(20)
)
Insert into Test (Data,Name) Values('2,3,4,5','Test')
GO
--SQL:
SELECT B.data, A.[name] FROM
(SELECT data = CAST('<R><v>' + REPLACE(Data, ',', '</v><v>') + '</v></R>' AS XML), [name] FROM TEST) A
CROSS APPLY
(SELECT data = R.v.value('.', 'nvarchar(100)') FROM A.data.nodes('/R/v') R(v)) B
/*
2 Test
3 Test
4 Test
5 Test
*/
Create Table Test(
Data Varchar(30),
Name Varchar(20)
)
Insert into Test (Data,Name) Values('2,3,4,5','Test')
go
;with cte as(
select convert(int,left(data,charindex(',',data)-1))d,right(data,len(data)-charindex(',',data))+',' data,name from test
union all
select convert(int,left(data,charindex(',',data)-1)),right(data,len(data)-charindex(',',data)),name from cte where len(data)>1
)select d,name from cte
go
drop table test
/*
d name
----------- --------------------
2 Test
3 Test
4 Test
5 Test
(4 行受影响)
*/
Create Table Test(
Data Varchar(30),
Name Varchar(20)
)
go
create trigger t_in on test
instead of insert
as
insert into test(data,name)
select substring(a.data,b.number,charindex(',',a.data+',',b.number) - b.number) data,a.name
from inserted a,master..spt_values b
where b.[type] = 'p' and b.number between 0 and len(a.data)
and substring(','+a.data,b.number,1) = ','
go
Insert into Test (Data,Name) Values('2,3,4,5','Test')
go
select * from test
drop trigger t_in
drop table test,#t
/*
Data Name
------------------------------ --------------------
2 Test
3 Test
4 Test
5 Test
(4 行受影响)
Create Table Test(
Data Varchar(30),
Name Varchar(20)
)
go
Insert into Test (Data,Name) Values('2,3,4,5','Test')
go
select substring(a.data,b.number,charindex(',',a.data+',',b.number) - b.number) data,a.name
into #t
from test a,master..spt_values b
where b.[type] = 'p' and b.number between 0 and len(a.data)
and substring(','+a.data,b.number,1) = ','
truncate table test
insert into test(data,name)
select * from #t
select * from test
drop table test,#t
/*
Data Name
------------------------------ --------------------
2 Test
3 Test
4 Test
5 Test
(4 行受影响)