Frage

Ich möchte eine Ansicht in SQL Server, dass Mähdreschern Metadaten mehrere Stücke von Datenbank erstellen.

Ein Stück von Metadaten I Leben in der sys.syscomments Tabelle will - die relevanten Spalten sind wie folgt:

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!

Wie Sie die Daten in der Spalte „Text“ sehen kann, ist aufgeteilt in mehrere Zeilen, wenn es die maximale Länge übergibt (8000 Byte / 4000 Zeichen in SQL Server, 12 Zeichen in meinem Beispiel). colid identifiziert die Reihenfolge, in der Sie den Text wieder zusammenzubauen.

Ich möchte Abfrage machen / Unterabfrage aus meiner Sicht die Kommentare aus der sys.syscomments Tabelle wieder zusammenzusetzen, so dass ich:

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

Irgendwelche Vorschläge oder Lösungen? Geschwindigkeit ist nicht in irgendeiner Weise kritisch, aber Einfachheit und die geringen Auswirkungen (I CLR-Funktionen vermeiden möchte und dergleichen - im Idealfall das Ganze in der Sichtdefinition verpackt werden würde). Ich habe in einige XML-basierten Vorschläge gesucht, aber die Ergebnisse haben Text mit XML Escape-Strings gefüllt produziert.

War es hilfreich?

Lösung

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

Andere Tipps

Es gibt mehrere mögliche Lösungen. Die einfachste ist CTE zu verwenden. Dieser Artikel hat eine gute Diskussion über das Thema: Verketten Row Werte in Transact-SQL

Warum nicht benutzen sys.sql_modules Definition Spalten, die speichert die Daten als eine einzelne nvarchar (max)?

Statt Lesen mehrerer syscomments Text (nvarchar (4000)) Spalten verteilt über mehrere Zeilen und mit zu verketten.

SELECT object_id, definition FROM sys.sql_modules

Nur so ein Gedanke ... Sie sagten einfach: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top