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

Joe*_*ips 15 sql t-sql sql-server sql-server-2005 escaping

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

SELECT dbo.getSomething(123) [Eggs[scrambled] or Bacon[fried]]
Run Code Online (Sandbox Code Playgroud)

最终的列名应该是这样的:

鸡蛋[炒]或培根[炒]

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

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

Mar*_*ith 23

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

select quotename('Eggs[scrambled] or Bacon[fried]') 
Run Code Online (Sandbox Code Playgroud)

返回

[Eggs[scrambled]] or Bacon[fried]]]
Run Code Online (Sandbox Code Playgroud)

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


Ale*_* K. 8

在内]联结束时挂一个[]

   SELECT [Eggs[scrambled]] or Bacon[fried]]] FROM Yummy
Run Code Online (Sandbox Code Playgroud)

  • @Joe:我认为马丁回答中的最后一句话是一个很好的解释。但我不会争论这一点,因为对某人来说似乎显而易见的事情对其他人来说可能有点晦涩难懂。实际上,这是像 SO 这样的网站的伟大之处之一:许多人可以以不同的方式解释同一件事,因此许多其他人可以选择最适合他们的解释。 (3认同)

gbn*_*gbn 5

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

SELECT 1 AS "[Eggs[scrambled] or Bacon[fried]]"
Run Code Online (Sandbox Code Playgroud)

  • 没有必要逃避任何事情并不完全正确。引号仍然需要转义! (4认同)