Si l’idée vous prend de générer dynamiquement une chaine de caractère ou un script contenant des retours chariot CHAR(13) et sauts de ligne CHAR(10) depuis SQL Management Studio 2016, sachez qu’ils ne sont plus pris en compte par défaut. Il est nécessaire d’activer l’option Retain CR/LF, c’est assez nouveau et encore vrai sur la dernière version du client de SQL Server (v17).
Dans l’exemple ci-dessous, on génère un script de désactivation des contraintes et triggers.
1 2 3 4 5 6 7 8 9 10 |
USE [AdventureWorks2016] GO SELECT SQLDyn = 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + ' NOCHECK CONSTRAINT ' + QUOTENAME(name) + CHAR(10) + 'GO' + CHAR(10) FROM sys.foreign_keys WHERE is_disabled = 0 UNION ALL SELECT SQLDyn = 'DISABLE TRIGGER ' + QUOTENAME(name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_id)) + CHAR(10) + 'GO' + CHAR(10) FROM sys.triggers WHERE is_disabled = 0 |
Quant on effectue un copier/coller du résultat de la requête, à l’arrivée, le script généré n’est pas très probant. Typiquement dans cette exemple, les sauts de ligne sont ignorés.
Bien évidemment, si on tente d’exécuter le script en question, on obtiendra une erreur, le formatage n’étant pas conforme :
Pour corriger le problème, c’est assez simple, se rendre dans le menu Tools\Options… :
Dans la section Query Results\SQL Server\Results to Grid, cocher l’option Retain CR/LF on copy or save :
On ouvre une nouvelle fenêtre que le nouveau paramètre soit pris en compte lors de l’exécution de la requête de génération de script (désactivation des contraintes et triggers :
1 2 3 4 5 6 7 8 9 10 |
USE [AdventureWorks2016] GO SELECT SQLDyn = 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + ' NOCHECK CONSTRAINT ' + QUOTENAME(name) + CHAR(10) + 'GO' + CHAR(10) FROM sys.foreign_keys WHERE is_disabled = 0 UNION ALL SELECT SQLDyn = 'DISABLE TRIGGER ' + QUOTENAME(name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_id)) + CHAR(10) + 'GO' + CHAR(10) FROM sys.triggers WHERE is_disabled = 0 |
On copie/colle le résultat dans une nouvelle fenêtre et là ça marche !
Source :