Domanda

Mi piacerebbe creare una vista in SQL Server, che combina diversi pezzi di metadati del database.

Un pezzo di metadati voglio vive nella tabella sys.syscomments - le colonne pertinenti ripresi sono i seguenti:

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!

Come si può vedere i dati nella colonna "testo" è suddiviso in più righe se passa la lunghezza massima (8000 byte / 4000 caratteri in SQL Server, 12 caratteri nel mio esempio). colid identifica l'ordine in cui assemblare il testo nuovo insieme.

Vorrei fare domanda / subquery a mio avviso, per rimontare i commenti dalla tabella sys.syscomments, in modo da avere:

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

Qualche suggerimento o soluzioni? La velocità non è in alcun modo critico, ma la semplicità e basso impatto è (vorrei evitare di funzioni CLR e simili - idealmente il tutto sarebbe avvolto nella definizione della vista). Ho esaminato alcuni suggerimenti basati su XML, ma i risultati hanno prodotto il testo pieno di stringhe di fuga XML.

È stato utile?

Soluzione

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

Altri suggerimenti

Ci sono diverse soluzioni possibili. Il più semplice è quello di utilizzare CTE. Questo articolo ha buona discussione sul tema: concatenazione dei valori di riga in Transact-SQL

Perché non usare sys.sql_modules colonne di definizione che memorizza i dati come un singolo nvarchar (max)?

Invece di leggere diversi syscomments testo (nvarchar (4000)) colonne distribuite su più righe e avere per concatenare.

SELECT object_id, definition FROM sys.sql_modules

Solo un pensiero ... hai detto semplice: -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top