80 votes

Comment concaténer du texte dans une requête dans sql server ?

Le SQL suivant :

SELECT notes + 'SomeText'
FROM NotesTable a 

Donnez l'erreur :

Les types de données nvarchar et text sont incompatibles dans l'opérateur add.

81voto

GateKiller Points 19113

La seule solution serait de convertir votre champ texte en champ nvarchar.

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

Sinon, je suggère de faire la concaténation dans votre application.

0 votes

Vous lancez donc le text comme un "énorme" 4000 nvarchar pour s'assurer que presque tout s'adapte ?

23voto

Chris Wuestefeld Points 1137

Vous pouvez également prendre en compte les valeurs NULL. Dans votre exemple, si la colonne notes a une valeur nulle, la valeur résultante sera NULL. Si vous souhaitez que les valeurs nulles se comportent comme des chaînes vides (de sorte que la réponse soit "SomeText"), utilisez la fonction IsNull :

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

21voto

Scott Nichols Points 3366

Si vous utilisez SQL Server 2005 ou une version ultérieure, en fonction de la taille des données du champ Notes, vous pouvez envisager d'utiliser nvarchar(max) au lieu d'utiliser une longueur spécifique, ce qui pourrait entraîner une troncature de la chaîne.

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

2 votes

Ceci devrait être la bonne réponse. Elle évite de tronquer le texte.

0 votes

Utilise-t-il plus de mémoire ou s'adapte-t-il automatiquement à la taille de la source ?

6voto

Craig Points 5169

Dans votre cas, vous pouvez résoudre le problème en ajoutant simplement un "N" devant "SomeText" (N'SomeText'). Si cela ne fonctionne pas, essayez Cast('SomeText' as nvarchar(8)).

2voto

edosoft Points 7783

Si vous utilisez SQL Server 2005 (ou une version ultérieure), vous pouvez envisager de passer à NVARCHAR(MAX) dans la définition de vos tables ; les types de données TEXT, NTEXT et IMAGE de SQL Server 2000 seront obsolètes dans les futures versions de SQL Server. SQL Server 2005 assure la compatibilité ascendante avec les types de données, mais vous devriez probablement utiliser VARCHAR(MAX), NVARCHAR(MAX) et VARBINARY(MAX) à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X