एक मेज को देखते हुए का उपयोग किए बिना एसक्यूएल सर्वर में CSV कॉलम से एक तालिका बनाएं:एक कर्सर
|Name | Hobbies |
-----------------------------------
|Joe | Eating,Running,Golf |
|Dafydd | Swimming,Coding,Gaming |
मैं इन पंक्तियों बाहर विभाजित करने के लिए चाहते हैं पाने के लिए:
|Name | Hobby |
----------------------
|Joe | Eating |
|Joe | Running |
|Joe | Golf |
|Dafydd | Swimming |
|Dafydd | Coding |
|Dafydd | Gaming |
लिए मैंने नीचे पूरा कर लिया है (उदाहरण एसएसएमएस में चलाने के लिए तैयार है), मेरा समाधान एक कर्सर का उपयोग करता है जो मुझे लगता है कि बदसूरत है। क्या ऐसा करने का कोई बेहतर तरीका है? मैं SQL Server 2008 R2 पर हूं यदि कुछ नया है जो मेरी मदद करेगा।
धन्यवाद
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Split]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].Split
go
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
go
declare @inputtable table (
name varchar(200) not null,
hobbies varchar(200) not null
)
declare @outputtable table (
name varchar(200) not null,
hobby varchar(200) not null
)
insert into @inputtable values('Joe', 'Eating,Running,Golf')
insert into @inputtable values('Dafydd', 'Swimming,Coding,Gaming')
select * from @inputtable
declare inputcursor cursor for
select name, hobbies
from @inputtable
open inputcursor
declare @name varchar(255), @hobbiescsv varchar(255)
fetch next from inputcursor into @name, @hobbiescsv
while(@@FETCH_STATUS <> -1) begin
insert into @outputtable
select @name, splithobbies.s
from dbo.split(',', @hobbiescsv) splithobbies
fetch next from inputcursor into @name, @hobbiescsv
end
close inputcursor
deallocate inputcursor
select * from @outputtable
हालांकि आपके उदाहरण में प्रत्येक व्यक्ति के पास वास्तव में तीन शौक हैं, मुझे लगता है कि प्रत्येक व्यक्ति के पास वास्तव में 1 या अधिक शौक हो सकते हैं? – LittleBobbyTables
@LittleBobbyTables हाँ, मुझे यह उल्लेख करना चाहिए था कि शौक सूची मनमानी लंबाई – amarsuperstar