¿Cómo concateno texto en una consulta en el servidor SQL?

80

El siguiente SQL:

SELECT notes + 'SomeText'
FROM NotesTable a 

Dar el error:

Los tipos de datos nvarchar y text son incompatibles en el operador add.

Greg Ogle
fuente

Respuestas:

81

La única forma sería convertir su campo de texto en un campo nvarchar.

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

De lo contrario, sugiero hacer la concatenación en su aplicación.

GateKiller
fuente
Entonces, ¿estás proyectando el text4000 "enorme" nvarcharpara asegurarte de que casi cualquier cosa quepa?
Matthieu
23

Es posible que también desee considerar valores NULL. En su ejemplo, si las notas de la columna tienen un valor nulo, el valor resultante será NULL. Si desea que los valores nulos se comporten como cadenas vacías (para que la respuesta sea 'SomeText'), utilice la función IsNull:

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

Si está utilizando SQL Server 2005 o superior, según el tamaño de los datos en el campo Notas, es posible que desee considerar la conversión a nvarchar (max) en lugar de la conversión a una longitud específica que podría resultar en el truncamiento de la cadena.

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a
Scott Nichols
fuente
2
Esta debería ser la respuesta correcta. Evita truncar el texto.
Billy
¿Utiliza más memoria o de alguna manera se "adapta automáticamente" al tamaño de la fuente?
Matthieu
6

Debe convertir explícitamente los tipos de cadena en el mismo para concatenarlos. En su caso, puede resolver el problema simplemente agregando una 'N' delante de 'SomeText' (N'SomeText '). Si eso no funciona, intente Cast ('SomeText' as nvarchar (8)).

Craig
fuente
4

Otra opción es el comando CONCAT :

SELECT CONCAT(MyTable.TextColumn, 'Text') FROM MyTable
David Gausmann
fuente
2

Si está utilizando SQL Server 2005 (o superior), es posible que desee considerar cambiar a NVARCHAR (MAX) en la definición de su tabla; Los tipos de datos TEXT, NTEXT e IMAGE de SQL Server 2000 quedarán obsoletos en futuras versiones de SQL Server. SQL Server 2005 proporciona compatibilidad con versiones anteriores de los tipos de datos, pero probablemente debería utilizar VARCHAR (MAX), NVARCHAR (MAX) y VARBINARY (MAX) en su lugar.

edosoft
fuente