我注意到Visual Studio 2008在sql中的列名周围放置了方括号。括号是否有任何优势?当我手工编写T-SQL代码时,我从未打扰过他们。
实施例: 视觉工作室: SELECT [column1],[column2] etc ...
我自己的方式: SELECT column1,column2等......
答案 0 :(得分:157)
如果在列名或标识符中使用关键字或特殊字符,则需要括号。您可以将列命名为[First Name]
(带空格) - 但每次引用该列时都需要使用括号。
较新的工具只是为了保持一致性而在任何地方添加它们。
答案 1 :(得分:49)
如果您的列与SQL关键字具有相同的名称,或者在其中包含空格,则它们很方便。
示例:
create table test ( id int, user varchar(20) )
哦不!关键字“user”附近的语法不正确。 但是这个:
create table test ( id int, [user] varchar(20) )
工作正常。
答案 2 :(得分:12)
如果您(出于某种原因)使用具有某些字符的列名称,则它们非常有用。
Select First Name From People
不起作用,但在列名称周围放置方括号将起作用
Select [First Name] From People
简而言之,它是一种明确声明对象名称的方式;列,表,数据库,用户或服务器。
答案 3 :(得分:6)
列名可以包含会使查询执行引擎混淆的字符和保留字,因此始终在它们周围放置括号可以防止这种情况发生。我想,比检查问题然后处理问题更容易。
答案 4 :(得分:5)
当列名是保留字时,可以使用括号。
如果以编程方式从您无法控制的列名集合中生成SQL语句,则可以通过始终使用括号来避免出现问题。
答案 5 :(得分:4)
另外 某些Sharepoint数据库的名称中包含连字符。在SQL语句中使用方括号可以正确解析名称。
答案 6 :(得分:3)
我相信它会在那里添加它们以保持一致性......只有在列名中有空格或特殊字符时才需要它们,但是当IDE生成SQL时,它们总是包含它们更清晰。
答案 7 :(得分:3)
无论遵循避免使用保留字的命名约定,Microsoft都会添加新的保留字。使用括号可以将代码升级到新的SQL Server版本,而无需先从客户端代码中编辑Microsoft新保留的单词。编辑可能是一个重要的问题。这可能会导致您的项目过早退役....
如果要在脚本中替换全部,则括号也很有用。如果批处理包含名为@String的变量和名为[String]的列,则可以将列重命名为[NewString],而不将@String重命名为@NewString。
答案 8 :(得分:2)
在20世纪90年代SQL的黑暗时代,这是一个很好的做法,因为SQL设计者试图将字典中的每个单词添加为关键字,以便无休止地充斥着新功能,他们称之为SQL3草案。
因此它保持了兼容性。
我发现它有另一个很好的副作用,当你在代码审查和重构中使用grep时它会有很大的帮助。
答案 9 :(得分:0)
它们有助于识别 SQL 中的每个元素。
例如:
CREATE TABLE SchemaName.TableName (
这实际上会在默认 SchemaName.TableName
架构下创建名为 dbo
的表,即使其意图可能是在 SchemaName
架构内创建表。
正确的方法如下:
CREATE TABLE [SchemaName].[TableName] (
现在它知道表名是什么以及它应该在哪个架构中创建(正确的是在 SchemaName
架构中,而不是在默认的 dbo
架构中)