6

Ich möchte eine Reihe von Daten in eine einzige Zeichenfolge auszuwählen, aber ich will noch jedes Element in einer eigenen Zeile (ich stecke es in Crystal Reports, und es wird dann schneller sein als Tonnen subreports verwenden.)SQL Server - Wie koaleszieren Sie eine Zeichenfolge und fügen Sie Zeilenumbrüche hinzu?

Also, ich habe folgende Daten:

ID Assessor 
1 Black 
1 Jones 

und ich mag es abzufragen, und eine einzelne Zeichenfolge zurück, die wie folgt aussieht:

Black 
Jones 

wenn ich coalesce mit einem select tun, kann ich Es wird durch Komma oder Semikolon getrennt, aber nicht durch Zeilenvorschub begrenzt:

BEGIN 
    declare @Assessors NVarChar(max) 
    Declare @LineFeed varchar(10) 
    DECLARE @Return varchar(10) 
    Set @LineFeed = char(10) 
    SET @Return = char(13) 

    Select @Assessors = COALESCE(@Assessors + ', ', '') + a.Assessor 
    FROM dbo.Assessment a 
    Where (@ID = a.ID) 

Return @Assessors 
END 

dass die Funktion 'Black, Jones' zurückgibt. Aber wenn ich die Linie zu

Select @Assessors = COALESCE(@Assessors + @Return + @LineFeed, '') + a.Assessor 

ändern kehrt ‚Black Jones‘ - es ist nicht in einem Zeilenvorschub oder Rückkehr gesetzt hat, nur einen Raum.

Ich denke, ich muss Coalesce nicht verwenden, aber ich habe versucht, nur Standard-Verkettung, und das wird es auch nicht setzen. Ich habe das jetzt in einer Funktion, aber ich plane es als Teil einer gespeicherten Prozedur, also ist es schneller.

Antwort

7

CHAR(13)+CHAR(10) produzieren Zeilenumbrüche, ich mache dies die ganze Zeit im Produktionscode.

Ich habe Ihren Code ausgeführt, und es erzeugt Zeilenumbrüche auf meinem System. Wechseln Sie in SSMS von "Results to Grid" zu "Results to Text" und Sie sehen die Zeilenumbrüche.

1

die Funktion Char verwenden einzufügen:

Tab char (9)

Zeilenvorschub char (10)

Carriage Rück char (13)

+1

+1. Das erinnert mich an die alten Zeiten der VB-String-Manipulation :-) –