4

我在运行时创建一个查询(使用我的 Delphi 应用程序)然后我执行

EXEC (MyRunTimeGeneratedQuery)

一个例子是这样的:

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

一个数据库字段包含“[Employee] Date Of Birth”,因此在结果查询中我有一个双“]”,这会产生语法错误。"Employee" 后面的 "]" 后面的 SQL Server 期待 ","。

我发现一个解决方案是使用双引号将所有字段别名括起来:

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

这是一个可靠的解决方案吗?如果有哪些缺点?(这是我的问题!)

我能想到的另一个解决方案是不允许用户存储“]”,这样

“[雇员]出生日期”

可能会变成

“(雇员)出生日期”

4

1 回答 1

4

使用"作为字段别名的封闭字符可能会导致相同的问题,如果"别名中有可能,例如 alias "Employee" Year Of Birth,我想会导致查询形成:

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

这在语法上是错误的。

我认为正确的做法是引用别名。如果"用作别名封闭字符,"则在编写查询时,应将原始别名中的每个字符加倍。如果你使用[并且你应该在原始别名中]加倍。]

函数quotename将为您做同样的事情(以及封闭别名到[and ]),但您不能将其用作:

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

如果您希望使用quotename,则应在编写查询之前完成(除非quotename它本身是查询的一部分)。

于 2013-09-03T14:44:20.600 回答