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)
因此,所有关闭的方括号都需要加倍.
在内]
联结束时挂一个[]
SELECT [Eggs[scrambled]] or Bacon[fried]]] FROM Yummy
Run Code Online (Sandbox Code Playgroud)
SET QUOTED_IDENTIFIER默认为 ON,因此无需转义任何内容
SELECT 1 AS "[Eggs[scrambled] or Bacon[fried]]"
Run Code Online (Sandbox Code Playgroud)