2016-08-08 2 views
0

안녕하세요 모든SQL 서버 분할 문자열과

select details from table 
enter code here 

결과에 기인하기 나에게

도와주세요 값을 얻을 : 나는 아래의 결과

Title FirstName LastName Mobile 
Mr  jack  steve  1234567789 
etc... 
에게 필요

Title|Firstname|Lastname|Mobilephone~Mr|jack|steve|123456789~Mr|test|Ltest|123456789~Mrs|Demo|Ldemo|12345678~Mrs|Fname|Lname|1234567 

+1

이 더 낫다고 테이블을 리팩토링에 대해 생각해야, 내가 케빈 Esche로 이동합니다 .. – SomeJavaGuy

+0

테이블 디자인 대신 주위 작업 refactornig 고려 디자인, 그러나 나는 아래에 귀하의 질문에 대한 해결책을 제공했습니다. 내 대답 아래를 확인하십시오. –

답변

0

당신은 wi가 저장 프로 시저를 작성해야합니다. 전체 라인을 스캔하고 루프에서 파이프로 구분 된 값을 제공합니다.

문제에 대한 솔루션
0

한 는 다음과 같이 주어진다 :

DECLARE @PARAM_STRING VARCHAR(1000)=REPLACE('Title|Firstname|Lastname|Mobilephone~Mr|jack|steve|123456789~Mr|test|Ltest|123456789~Mrs|Demo|Ldemo|12345678~Mrs|Fname|Lname|1234567','|',''',''')+'''' 
DECLARE @DYNAMIC_QUERY VARCHAR(MAX) 
DECLARE @TABLE TABLE(ID INT,DATA VARCHAR(MAX)) 
INSERT INTO @TABLE 
SELECT 1 ID, 'SELECT '+DATA FROM (
SELECT A.B.value('.','VARCHAR(50)')DATA FROM 
(SELECT CAST('<A>'''+REPLACE(@PARAM_STRING,'~','''</A><A>''')+'</A>' AS  XML)COL)T 
CROSS APPLY T.COL.nodes('/A') AS A(B))F WHERE DATA<>'' 
SELECT @DYNAMIC_QUERY=STUFF((SELECT ' UNION ALL ' + CAST(DATA AS  VARCHAR(MAX))  [text()]FROM @TABLE WHERE ID = t.ID 
    FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,10,' ') 
FROM @TABLE t GROUP BY ID 
EXECUTE(@DYNAMIC_QUERY)