我在运行时创建一个查询(使用我的Delphi应用程序)然后我用
执行EXEC (MyRunTimeGeneratedQuery)
一个例子是:
SELECT
1977 AS [[Employee] Year Of Birth],
'Marc' AS [[Employee] Name]
一个DB字段包含“[Employee]出生日期”,因此在生成的查询中我有一个双“]”,这会产生语法错误。在“Employee”之后的“]”之后的SQL Server是expectring“,”。
我发现解决方案是使用双引号括起所有字段别名:
SELECT
1977 AS "[Employee] Year Of Birth",
'Marc' AS "[Employee] Name"
这是一个可靠的解决方案吗?如果有的话有哪些缺点? (这是我的问题!)
我能想到的另一个解决方案是不允许用户存储“]”,以便
“[员工]出生日期”
可能会成为
“(员工)出生日期”
答案 0 :(得分:4)
如果别名中可能有"
,则使用"
作为字段别名的封闭字符可能会导致同样的问题,例如:别名"Employee" Year Of Birth
,我想将导致查询形成为:
SELECT
1977 AS ""Employee" Year Of Birth",
-- etc.
这在语法上是错误的。
我认为正确的做法是引用别名。如果使用"
作为别名封闭字符,则在编写查询时,应将原始别名中的每个"
加倍。如果您使用[
和]
,则应将原始别名中的每个]
加倍。
函数quotename
将为您执行相同操作(以及包含[
和]
的别名),但您不能将其用作:
SELECT
1977 AS quotename('[Employee] Year Of Birth'),
-- etc.
如果您希望使用quotename
,则应在撰写查询之前完成(除非quotename
本身是查询的一部分)。