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