2011-04-18 4 views
8

J'utilise + pour concaténer la valeur de plusieurs colonnes. Mais + ne fonctionne pas si l'une de ces colonnes a une valeur nulle. Par exempleconcaténer des colonnes de valeurs nulles dans Tsql

Select null+ 'Test' 

requête renvoie null au lieu de 'Test'.

Quels sont vos conseils pour résoudre ce problème?

Répondre

16

Sur les versions antérieures à SQL Server 2012, vous devez utiliser

Select ISNULL(YourColumn,'') + 'Test' /*Or COALESCE(YourColumn,'')*/ 

pour éviter ce problème.

Il existe une option de connexion SET CONCAT_NULL_YIELDS_NULL OFF mais elle est obsolète. SQL Server 2012 introduit la fonction CONCAT qui traite NULL comme une chaîne vide lors de la concaténation.

SELECT CONCAT(null,'Test') 
+0

est-il une autre façon de le résoudre j'émigre mon projet d'Oracle à MSSQL, je ne veux pas ajouter le contrôle isnull à chaque commande – jhash

+0

@jhash - Le seul 3? les moyens dont je suis au courant sont déjà dans ma réponse. 'ISNULL',' COALESCE', ou 'CONCAT_NULL_YIELDS_NULL'. J'ajouterais 'COALESCE' à tous les endroits appropriés car cela est standard et fonctionnera à la fois dans Oracle et SQL Server. A vous de décider si vous voulez utiliser des fonctionnalités obsolètes, mais elles cesseront de fonctionner dans les futures versions et cette option de connexion n'est pas compatible avec certaines fonctionnalités de SQL Server. Je ne l'utiliserais pas moi-même. –

+0

merci martin pour votre réponse détaillée – jhash

0

Utilisation IsNull:

SELECT IsNull(MyColumn, '') + 'Test' ... 
+0

Y at-il une autre façon de le résoudre? Je migre mon projet d'oracle à mssql, je ne veux pas ajouter un contrôle isnull à chaque contrôle – jhash

+0

Je pense que Martin a une solution qui fonctionnerait sans changer la requête – Larry

Questions connexes