如何将方括号内的方括号转换为字段名称

时间:2011-05-20 16:18:32

标签: sql sql-server sql-server-2005 tsql escaping

我有一些生成列名的动态SQL。一个简单的例子可能是这样的:

SELECT dbo.getSomething(123) [Eggs[scrambled] or Bacon[fried]]

最终的列名应为:

  

鸡蛋[炒蛋]或培根[炒]

如果我尝试运行它,它会在单词OR上出错(即使我用xyz替换它仍然会在该标记上出现错误)。如果我拿出方括号的内部集合,问题就解决了。所以我的结论是你不能嵌套方括号,除非你以某种方式逃避它们。

在这种情况下如何逃避它们?

4 个答案:

答案 0 :(得分:20)

您可以使用quotename功能查看正确的转义。

select quotename('Eggs[scrambled] or Bacon[fried]') 

返回

[Eggs[scrambled]] or Bacon[fried]]]

因此所有关闭的方括号都需要加倍。

答案 1 :(得分:8)

在内嵌]

的末尾挂起[]
   SELECT [Eggs[scrambled]] or Bacon[fried]]] FROM Yummy

答案 2 :(得分:4)

SET QUOTED_IDENTIFIER默认为ON,因此无需转义任何内容

SELECT 1 AS "[Eggs[scrambled] or Bacon[fried]]"

答案 3 :(得分:1)

在查询Excel工作表的SSIS SQL语句中,必须用方括号代替括号以选择各个列。例如,选择“我的列[大列]”,您可以从[$ A1:AX10000]中选择[我的列(大列)]