2016-04-06 5 views
0

Ich habe eine Tabelle, die mehrere hundert Spalten breit ist. Gibt es eine Möglichkeit, jede Zeile in eine einzelne verkettete Zeichenfolge mit dem Spaltentitel zu konvertieren, ohne jede einzelne Spalte in der Abfrage auflisten zu müssen? Ich habe etwas mit einer Abfrage gemacht, aber das ist mühsam für jede Spalte und scheint fehleranfällig zu sein. Hier ist ein kurzer Schnipsel zeigt drei Spalten im Format verketteten ich brauche, erfolgte in der Spalte-für-Spalt Ansatz:Konvertieren Zeile in verkettete Zeichenfolge mit Spaltennamen enthalten

SELECT 
Concat( 
    IIf(Id IS NULL, Null, Concat('Id: ' , [Id] , '\n')) , 
    IIf(StandardClientId IS NULL, Null, 
    Concat('StandardClientId: ' , [StandardClientId] , '\n')) , 
    IIf(ClientName IS NULL, Null, 
    Concat('ClientName: ' , [ClientName] , '\n')) 
) AS ReportLine 
FROM dbo.DataDecoded; 

Ich bin mit Microsoft SQL Server 2014-Standard.

Dank

+2

Dies wäre viel einfacher auf der Präsentationsschicht erreicht werden. Was verwenden Sie, um diese Informationen anzuzeigen? –

+0

Sie könnten es wahrscheinlich mit dynamischem SQL machen oder indem Sie die Abfrage erstellen, indem Sie 'INFORMATION_SCHEMA.COLUMNS' abfragen, aber warum sollten Sie diese Formatierung nicht einfach in Ihrer Anwendung durchführen? Ich verstehe nicht, was du erreichen willst. Es sieht fast so aus, als ob du versuchst, den Tisch zu UNTRAGEN. –

+0

Ich verwende dies, um Berichte für jede ausgewählte Zeile auszudrucken. Jede Zeile stellt einen Ereignisbericht dar, und jede Spalte stellt ein Feld im Bericht dar - also müssen Personen, die versuchen, einen bestimmten Bericht zu verstehen, dies so ausgelegt sehen. – rsjaffe

Antwort

1

Der einfachste Weg dies zu tun ist, um eine Abfrage zu schreiben, die für Sie das lästige Teil Ihrer Anweisung schreibt:

SELECT ORDINAL_POSITION, 
    COLUMN_NAME, 
    CONCAT('IIF(',COLUMN_NAME,' IS NULL, NULL, CONCAT(''', COLUMN_NAME, ''', '': '',', QUOTENAME(COLUMN_NAME), ', ''\n'')), ') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'DataDecoded' 
ORDER BY ORDINAL_POSITION; 

Sie nehmen noch einen Schritt weiter und macht die ganze Sache Dynamisch in einem Sproc, aber das könnte Zeitverschwendung sein.

+0

In der gleichen Richtung, hier ist etwas einfach, dass man vielleicht in der Lage sein zu bauen: SELECT CONCAT (COLUMN_NAME, ': ') VON INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Adresse' UND TABLE_SCHEMA = PATH' Person' FOR XML (") –

Verwandte Themen