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.

Greg Ogle
quelle

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.

GateKiller
quelle
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
Chris Wuestefeld
quelle
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
Scott Nichols
quelle
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)).

Craig
quelle
4

Eine weitere Option ist der Befehl CONCAT :

SELECT CONCAT(MyTable.TextColumn, 'Text') FROM MyTable
David Gausmann
quelle
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.

edosoft
quelle