如何查询包含“ E”的TSQL col?

时间:2020-08-31 17:06:45

标签: sql-server tsql

我使用openquery通过DAX SUMMARIZE函数从SSAS(表格立方体)创建表。 “ [”和“]”随附的列名。我将列名加载到临时表中,但由于包含“ E”,因此无法访问特定表。

enter image description here

如何编写可调用该特殊名称类型的查询?

我尝试过:

SELECT *
FROM #temp
WHERE [Report Date] = 'xxxx'

SELECT *
FROM #temp
WHERE [[Report Date]] = 'xxxx'

SELECT *
FROM #temp
WHERE '[Report Date]' = 'xxxx'

1 个答案:

答案 0 :(得分:0)

如果您使用方括号来引用以方括号开头/结尾的名称,则它看起来像这样:

SELECT *
FROM #temp
WHERE [[Report Date]]] = 'xxxx'

SQLServer的原因是,如果名称用方括号引起来,则不关心用方括号括起来,但确实关心用方括号括起来,因此,名称中包含的方括号必须通过加倍来进行转义起来

因此,名称为:

[[Report Date]]]
1233333333333445
  1. 方括号-报价标识符
  2. 方括号-名称中的OSB
  3. 报告日期
  4. 双尖括号-告诉sql server名称中的双尖括号
  5. 单个方括号-带引号的标识符结尾

使用ANSI引号对此可能最清楚:

SELECT *
FROM #temp
WHERE "[Report Date]" = 'xxxx'

在引用名称时,始终避免使用' -它们用于表示字符串,而不是标识符。说select x as 'hello world'可能有用,但是尝试在诸如WHERE 'hello world' = ...之类的查询中使用它是无效的,因为它被解释为字符串,而不是标识符。避免在选择中使用它来引用标识符,这意味着您不会再在where子句中错误地这样做