我注意到Visual Studio 2008在sql中的列名周围放置了方括号。括号有什么好处吗?当我手代码T-SQL,我从来没有打扰他们。

例子:

Visual Studio:

SELECT [column1], [column2] etc...

我自己的方式:

SELECT column1, column2 etc...

当前回答

列名可能包含字符和保留字,这会使查询执行引擎感到困惑,因此在列名周围放置括号可以防止这种情况发生。我想,这比检查问题然后处理问题要容易得多。

其他回答

如果在列名或标识符中使用关键字或特殊字符,则需要括号。你可以将一个列命名为[First name](带一个空格)——但是每次你引用这个列时都需要使用括号。

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

它们对于识别SQL中的每个元素非常有用。

例如:

CREATE TABLE SchemaName.TableName (

这实际上会创建一个名为SchemaName的表。在默认的dbo模式下创建TableName,尽管目的可能是在SchemaName模式内创建表。

正确的方法如下:

CREATE TABLE [SchemaName].[TableName] (

现在它知道表名是什么,以及应该在哪个模式中创建它(正确地是在SchemaName模式中,而不是在默认的dbo模式中)

当列名是保留字时,可以使用方括号。

如果以编程方式从无法控制的列名集合生成SQL语句,则可以通过始终使用括号来避免问题。

如果列的名称与SQL关键字相同,或者列中有空格,则使用这种方法非常方便。

例子:

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

哦,不!关键字“user”附近的语法错误。 但这:

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

工作很好。

微软没有遵循避免使用保留字的命名约定,而是添加了新的保留字。使用括号可以将代码升级到新的SQL Server版本,而不需要首先从客户端代码中编辑Microsoft新保留的单词。编辑是一个很重要的问题。它可能会导致您的项目提前退役....

当您希望在脚本中替换全部时,方括号也很有用。如果你的批处理包含一个名为@String的变量和一个名为[String]的列,你可以将列重命名为[NewString],而不用将@String重命名为@NewString。