首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何转义列别名中的方括号?

如何转义列别名中的方括号?
EN

Stack Overflow用户
提问于 2019-06-13 07:35:42
回答 2查看 1.6K关注 0票数 0

以下产生错误:

代码语言:javascript
运行
复制
SELECT 1 AS [dada[daa]]

Msg 105,15级,状态1,在字符串'dadadaa‘之后的第190行未闭合引号。 Msg 102,15级,状态1,第190行在“dadadaa”附近的错误语法。

如果列别名中有方括号,则可以使用如下引号:

代码语言:javascript
运行
复制
SELECT 1 AS 'dada[daa]'

但是,我正在构建一些复杂的动态the语句,每个列别名都用方括号括起来,如果别名包含方括号,则使用引号将使事情变得更加困难。

那么,有什么办法可以摆脱这些括号吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-13 07:41:37

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

代码语言:javascript
运行
复制
SELECT *
FROM [My]]Table];

不过,您只需要用右括号来完成这个任务,而不需要左括号。例如:

代码语言:javascript
运行
复制
SELECT *
FROM [My[Table];

但是,基于这个语句,“但是我正在构建一些复杂的动态this语句,每个列别名都用方括号括起来,如果别名包含方括号,则使用引号会使事情变得更加困难。”看起来你在做类似于'... FROM [' + @TableName + '] ...'的事情;不要。使用QUOTENAME'... FROM ' + QUOTENAME(@TableName) + '...'

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

票数 3
EN

Stack Overflow用户

发布于 2019-06-13 07:41:28

显而易见的答案是避免人名中的方括号。括号和双引号在too中用作引号(双引号也在ANSI标准中)。

除此之外,你还可以双倍引用引号(如:

代码语言:javascript
运行
复制
select 1 as [da[da]]]

da[da]
------
1

代码语言:javascript
运行
复制
select 1 as "da[da]"

da[da]
------
1

最后

代码语言:javascript
运行
复制
select 1 as "da""da"""

da"da"
------
1

同样,您可能不应该这样做,因为它会导致脆弱的代码。

真正的问题

从注释中可以看出,实际问题似乎是将字段名本地化以供显示。由于某些原因,这是在查询中完成的,如果字段名包含引号或其他意外字符,则会导致各种问题。

这方面的常见解决方案是将结果本地化在表示层,而不是查询。大多数报告工具、web和桌面应用程序堆栈都支持这一点。Windows窗体、WPF和所有ASP.NET堆栈都有各自的本地化功能。

报告服务也是如此,尽管更现代的解决方案将从另一个源(如数据库)中提取翻译。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56575521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档