2008-09-09 220 views
117

我注意到Visual Studio 2008在sql中的列名周围放置了方括号。括号是否有优势?当我手工编写T-SQL时,我从来没有为它们困扰过。sql语句中方括号[]的用法是什么?

例子: 的Visual Studio: 选择[列1],[列2]等..

我自己的方式: SELECT列1,列2等等

+0

这是你的手工编码的SQL从来不需要括号,你的数据库命名约定应排除需要括号的名字是一件好事。 – 2008-09-09 21:06:54

+0

相关答案讨论QUOTED_IDENTIFIER设置:http://stackoverflow.com/questions/19657101/what-is-the-difference-between-square-brackets-and-single-quotes-for-aliasing-in – 2014-10-29 02:09:07

回答

127

括号是必需的。你可以命名一列[First Name](带一个空格) - 但是那么每当你引用该列时,你都需要使用括号。

为了以防万一或为了保持一致性,新工具将它们添加到任何地方。

5

该支架可使用时列名是保留字。

如果你是编程生成从你不用管列名的集合的SQL语句,那么你就可以避开始终使用括号问题。如果您使用关键字或特殊字符的列名或标识符

6

列名可以包含字符和保留字会混淆查询执行引擎,所以将它们放在括号周围随时防止这种情况的发生。我想,比检查问题然后处理它更容易。

3

我相信这增加了他们那里的一致性......当你在列名称中的空格或特殊字符他们只需要,但它的清洁剂只是包括他们当IDE生成SQL的所有时光。

41

如果您的列与SQL关键字具有相同的名称,或者其中包含空格,它们非常方便。

例子:

create table test (id int, user varchar(20)) 

哦,不!关键字'user'附近的语法不正确。 但这:

create table test (id int, [user] varchar(20)) 

工作正常。

10

如果您是(出于某种原因)使用带有特定字符的列名称,则它们非常有用。

Select First Name From People 

是行不通的,但是把方括号的列名会工作

Select [First Name] From People 

总之,它是明确声明对象名称的方式;列,表,数据库,用户或服务器。

4

此外 有些SharePoint数据库包含在其名称中的连字符。在SQL语句中使用方括号可以正确解析名称。

3

不管下面是避免使用保留字的命名约定,微软并添加新的保留字。使用括号可以让您的代码升级到新的SQL Server版本,而无需首先编辑客户端代码中的Microsoft新保留字。这种编辑可能是一个重大关切。这可能会导致您的项目过早退役....当你想全部替换在脚本

支架也可以是有用的。如果您的批处理包含名为@String的变量和名为[String]的列,则可以将该列重命名为[NewString],而无需将@String重命名为@NewString。

1

在SQL中1990ths黑暗时代它是作为SQL设计师试图在字典中的关键字的新功能无尽雪崩添加的每个字一个很好的做法,他们把它称为SQL3草案。

因此它保持向前兼容性。

我发现它还有另一个很好的副作用,它有很大帮助,当您使用的代码审查和重构的grep。

相关问题