6 Stimmen

SQL Server - Wie kann man eine Zeichenfolge zusammenführen und Zeilenumbrüche hinzufügen?

Ich möchte eine Reihe von Daten in einer einzigen Zeichenfolge auswählen, aber ich möchte immer noch jedes Element in einer eigenen Zeile (ich werde es dann in Crystal Reports, und es wird schneller als mit Tonnen von Subreports sein).

Ich habe also die folgenden Daten:

ID  Assessor
1   Black
1   Jones

und ich möchte es abfragen und eine einzelne Zeichenfolge zurückgeben, die wie folgt aussieht:

Black
Jones

Wenn ich einen Select mit Coalesce durchführe, kann ich ihn mit Komma oder Semikolon abgrenzen, aber nicht mit Zeilenvorschub:

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

in dem die Funktion 'Black, Jones' zurückgibt. Aber wenn ich die Zeile in

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

wird 'Black Jones' zurückgegeben - es wird kein Zeilenvorschub oder Return eingefügt, nur ein Leerzeichen.

Ich denke, ich muss nicht Coalesce verwenden, aber ich habe versucht, nur Standard-Verkettung, und das wird nicht in entweder setzen. Ich habe dies in einer Funktion im Moment, aber planen auf setzen es als Teil einer gespeicherten Prozedur, so dass es schneller ist.

7voto

KM. Punkte 98297

CHAR(13)+CHAR(10) erzeugt Zeilenumbrüche, ich mache das ständig im Produktionscode.

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

1voto

HLGEM Punkte 91543

Verwenden Sie zum Einfügen die Funktion Char:

Registerkarte Zeichen(9)

Zeilenvorschub Zeichen(10)

Wagenrücklauf Zeichen(13)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X