2010-01-25 3 views
6

여러 데이터베이스 메타 데이터를 결합한 SQL Server보기를 만들고 싶습니다. 메타 데이터의TSQL 뷰의 데이터 행에서 문자열 연결 수행 (피벗?)

한 조각 나는 sys.syscomments 테이블의 삶을 원하는 - 다음과 같이와 관계있는 열은 다음과 같습니다 통과되는 경우에는 "텍스트"열에서 데이터를 볼 수있는

id colid text 
---- ------ ------------- 
1001 1  A comment. 
1002 1  This is a lo 
1002 2  ng comment. 
1003 1  This is an e 
1003 2  ven longer c 
1003 3  omment! 

여러 행으로 분할 최대 길이 (SQL Server에서 8000 바이트/4000 자, 필자의 예에서는 12 자). colid은 텍스트를 다시 조합하는 순서를 식별합니다.

내가 가지고 있도록 sys.syscomments 테이블에서 의견을 재 조립하는 내보기에 쿼리/하위 쿼리를하고 싶습니다

:

id comment (nvarchar(max)) 
---- ---------------------------------- 
1001 A comment. 
1002 This is a long comment. 
1003 This is an even longer comment! 

어떤 제안이나 솔루션은? 속도는 어떤면에서도 중요하지 않지만 단순성과 영향이 적습니다 (CLR 기능 등을 피하고 싶습니다. 모든 것이 뷰 정의에 포함되는 것이 이상적입니다). 몇 가지 XML 기반 제안을 살펴 보았지만 XML 이스케이프 문자열로 가득 찬 텍스트가 결과로 생성되었습니다.

답변

13
SELECT id, 
     (
     SELECT text AS [text()] 
     FROM mytable mi 
     WHERE mi.id = md.id 
     ORDER BY 
       mi.col 
     FOR XML PATH(''), TYPE 
     ).value('/', 'NVARCHAR(MAX)') 
FROM (
     SELECT DISTINCT id 
     FROM mytable 
     ) md 
+0

, 나는 이미이 길을 갈 간단한 :-)에게 말 했는가. 결과는 논리 비교 연산자에서 새 행까지의 모든 것에 대해 XMl 이스케이프 시퀀스로 가득 차있는 텍스트입니다. 이 잘못된 출력은 LIKE 검색과 같은 추가 작업에는 적합하지 않습니다. – David

+0

'@ David' : 게시판 업데이트를 참조하십시오. – Quassnoi

+0

고맙습니다. 이것은 훨씬 더 도움이되었습니다. – David

1

왜 하나 NVARCHAR (최대)로 데이터를 저장하는 sys.sql_modules 정의 열을 사용하지이 문서에서는 주제에 대한 좋은 토론이있다?

몇 개의 syscomments text (nvarchar (4000)) 열을 여러 행에 걸쳐 연결하고 연결해야하는 대신이 열을 읽는 대신.

SELECT object_id, definition FROM sys.sql_modules 

그냥 생각

... 당신이 질문에서 언급 한 바와 같이