L'utilisation de guillemets pour définir l'alias de champ est la meilleure solution?

Je crée à l'exécution une requête (avec mon application Delphi) que j'exécute ensuite avec

EXEC (MyRunTimeGeneratedQuery) 

Un exemple est ceci:

 SELECT 1977 AS [[Employee] Year Of Birth], 'Marc' AS [[Employee] Name] 

un champ de database contient "Date de naissance [Employee]", donc dans la requête résultante j'ai un double "]", ceci donne une erreur de syntaxe. SQL Server après le "]" qui suit "Employee" s'expire ",".

J'ai trouvé qu'une solution utilise des guillemets doubles pour entourer tout l'alias de champ:

 SELECT 1977 AS "[Employee] Year Of Birth", 'Marc' AS "[Employee] Name" 

Est-ce une solution fiable? Quels sont les inconvénients, le cas échéant? (c'est ma question!)

Une autre solution que je peux penser est de ne pas permettre à l'user de stocker "]", de sorte que

"[Employé] Date de naissance"

deviendra probablement

"(Employé) Date de naissance"

Utiliser " comme un caractère englobant pour l'alias champ peut conduire au même problème, s'il y a possibilité d'avoir " dans le nom d'alias, par exemple l'alias "Employee" Year Of Birth , je suppose que résultat sera une requête formée comme:

 SELECT 1977 AS ""Employee" Year Of Birth", -- etc. 

ce qui est syntaxiquement faux.

Je pense que la bonne chose à faire est de citer un nom d'alias. Si vous utilisez " comme un caractère englobant un alias, vous devez doubler chacun " dans le nom d'alias d'origine, lors de la composition de la requête. Si vous utilisez [ et ] vous devriez doubler chacun ] dans le nom d'alias d'origine.

La fonction quotename fera de même pour vous (avec l'alias englobant [ et ] ), mais vous ne pouvez pas l'utiliser comme:

 SELECT 1977 AS quotename('[Employee] Year Of Birth'), -- etc. 

Si vous souhaitez utiliser quotename , cela doit être fait avant de composer la requête (sauf si quotename lui-même fait partie de la requête).