Wie verkette ich Text in einer Abfrage in SQL Server?


80

Das folgende SQL:

SELECT notes + 'SomeText'
FROM NotesTable a 

Geben Sie den Fehler ein:

Die Datentypen nvarchar und text sind im Operator add nicht kompatibel.

Antworten:


81

Die einzige Möglichkeit wäre, Ihr Textfeld in ein nvarchar-Feld zu konvertieren.

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

Andernfalls schlage ich vor, die Verkettung in Ihrer Anwendung durchzuführen.


Sie werfen also die text"riesige" 4000 nvarchar, um sicherzustellen, dass fast alles passt?
Matthieu

23

Möglicherweise möchten Sie auch NULL-Werte berücksichtigen. In Ihrem Beispiel, wenn die Spalte Notizen einen Nullwert hat, dann wird der resultierende Wert NULL sein. Wenn Sie möchten, dass sich die Nullwerte wie leere Zeichenfolgen verhalten (sodass die Antwort "SomeText" lautet), verwenden Sie die IsNull-Funktion:

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a

21

Wenn Sie SQL Server 2005 oder höher verwenden, sollten Sie abhängig von der Größe der Daten im Feld Notizen möglicherweise eine Umwandlung in nvarchar (max) in Betracht ziehen, anstatt eine bestimmte Länge zu verwenden, die zum Abschneiden von Zeichenfolgen führen kann.

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a

2
Dies sollte die richtige Antwort sein. Es wird vermieden, Text abzuschneiden.
Billy

Benutzt es mehr Speicher oder passt es sich irgendwie automatisch an die Quellgröße an?
Matthieu

6

Sie müssen die Zeichenfolgentypen explizit in dieselbe umwandeln, um sie zu verketten. In Ihrem Fall können Sie das Problem lösen, indem Sie einfach ein 'N' vor 'SomeText' (N'SomeText ') hinzufügen. Wenn das nicht funktioniert, versuchen Sie es mit Cast ('SomeText' als nvarchar (8)).



2

Wenn Sie SQL Server 2005 (oder höher) verwenden, sollten Sie in Ihrer Tabellendefinition auf NVARCHAR (MAX) umsteigen. Die Datentypen TEXT, NTEXT und IMAGE von SQL Server 2000 werden in zukünftigen Versionen von SQL Server nicht mehr unterstützt. SQL Server 2005 bietet Abwärtskompatibilität mit Datentypen. Sie sollten jedoch wahrscheinlich stattdessen VARCHAR (MAX), NVARCHAR (MAX) und VARBINARY (MAX) verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.