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