¿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.

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.


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

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

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)).



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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.