首页 > 解决方案 > 如何转义列别名中的方括号?

问题描述

以下产生错误:

SELECT 1 AS [dada[daa]]

消息 105,级别 15,状态 1,第 190 行字符串 'dada[daa]' 后面的未闭合引号。

消息 102,级别 15,状态 1,第 190 行“dada[daa]”附近的语法不正确。

如果我在列别名中有方括号,我可以使用这样的引号:

SELECT 1 AS 'dada[daa]'

但是我正在构建一些复杂的动态 T-SQL 语句,并且每个列别名都用方括号括起来,如果别名包含括号,则使用引号会使事情变得有点困难。

那么,有没有办法以某种方式逃避这些括号?

标签: sql-servertsqlcolumn-alias

解决方案


您需要将它们加倍,就像单引号 ( ') 一样:

SELECT *
FROM [My]]Table];

不过,您只需要使用右括号来执行此操作,而无需使用左括号。例如:

SELECT *
FROM [My[Table];

然而,基于此声明“但我正在构建一些复杂的动态 T-SQL 语句,并且每个列别名都用方括号括起来,如果别名包含括号,则使用引号会使事情变得更难一些。” 好像您正在做类似的事情'... FROM [' + @TableName + '] ...';不。使用QUOTENAME'... FROM ' + QUOTENAME(@TableName) + '...'

QUOTENAME正确引用和转义您的变量。因此,对于 value '[MyTable]',它将返回'[[MyTable]]]'。它还有第二个可选参数,可用于引用带有其他标识符的输入字符串。例如,假设变量@String的值为“Don't”,则QUOTENAME(@String, '''')返回'Don''t'.


推荐阅读