SQL中方括号的用途

  • Post author:
  • Post category:其他

在SQL语句中,会使用方括号:  [  ]

那么,以下两种方式有啥区别:

SELECT [FirstName] FROM [Contacts]

SELECT FirstName FROM Contacts

包围对象和字段名 Around Object and Field Names

简单地说,方括号被用来转义关键字、保留字或特殊字符。

最常见的是,当人们在给对象和字段命名时使用空格时,我们看到需要使用方括号。  检查一下上面的原始例子,因为没有特殊字符,而且没有一个名字是保留字,所以并不真正需要包括方括号。

也就是说,如果他们不是将字段命名为FirstName,而是将其命名为First Name,那么在字段名周围的方括号就成为必须的。

你可以用方括号来括住名字。如果名称不包含任何空格或特殊字符(如标点符号),方括号是可选的。如果名称中含有空格或特殊字符,你必须使用方括号。

提示:当你设计表格和报告时,包含空格的名称更容易阅读,可以节省你的时间,但最终可能使你在编写SQL语句时输入更多的内容。当你为数据库中的对象命名时,你应该考虑到这一点。

使用方括号有坏处么?

简短的回答,没有。 包括括号没有真正的坏处,即使不是严格必要的。

你会看到许多有经验的开发者使用它们来确保永远不会有任何问题。

例1:

我们看一下在一个表单中寻找第一个匹配项的代码

Sub FrmRequery(frm As Form, sSearchField As String, sSearchTerm As String)

    Dim rs                    As DAO.Recordset

    Set rs = frm.RecordsetClone

    rs.FindFirst sSearchField & “='” & sSearchTerm & “‘”

    frm.Bookmark = rs.Bookmark

    Set rs = Nothing

End Sub

像下面的代码会更好些:

Sub FrmRequery(frm As Form, sSearchField As String, sSearchTerm As String)

    Dim rs                    As DAO.Recordset

    Set rs = frm.RecordsetClone

    rs.FindFirst “[” & sSearchField & “]='” & sSearchTerm & “‘”

    frm.Bookmark = rs.Bookmark

    Set rs = Nothing

End Sub

因为第二个将接受任何字段名,而第一个在传递字段名中含有空格或其他特殊字符时将出错。

当编码时,总是假设最坏的情况;一些额外的括号保证你的代码不会被破坏,并能处理任何传给他的数据。

例2:

我们使用脚本创建一个表:

CREATE TABLE Date

(

      Id AUTOINCREMENT PRIMARY KEY,

      Date DATETIME

);

可能会报错:

Syntax error in CREATE Table statement.

Syntax error in field definition.

为什么? 因为表的名字和字段都是用了保留字“Date”。 因此,如果我们真的想创建这样一个表,这时就会使用方括号,可以这样做:

CREATE TABLE [Date]

(

      Id AUTOINCREMENT PRIMARY KEY,

      [Date] DATETIME

);

例3:

与前面的例子类似,让我们尝试创建一个名为 “Corporate Contacts”的表,有以下字段。Id, First Name, Last Name, Title, Is Active, Date Created.  如下所示:

CREATE TABLE Corporate Contacts

(

      Id AUTOINCREMENT PRIMARY KEY,

      First Name CHAR,

      Last Name CHAR,

      Title CHAR,

      Is Active BIT,

      Date DATETIME

);

但这将再次失败,由于使用了特殊字符(空格)和保留字,就需要加方括号。 因此,正确的语法应该是:

CREATE TABLE [Corporate Contacts]

(

      Id AUTOINCREMENT PRIMARY KEY,

      [First Name] CHAR,

      [Last Name] CHAR,

      Title CHAR,

      [Is Active] BIT,

      [Date] DATETIME

);

但更好的方法是不使用特殊字符和保留字:

CREATE TABLE CorporateContacts

(

      ContactId AUTOINCREMENT PRIMARY KEY,

      FirstName CHAR,

      LastName CHAR,

      Title CHAR,

      IsActive BIT,

      CreationDate DATETIME

);

总结

现在,从这个讨论中应该有两个主要的收获。

在应用程序中命名任何东西时,不要使用特殊字符(记住,在命名时,空格是不好的!)或保留字!这是所有开发人员的最佳做法。这对任何开发人员来说都是一个最佳实践。

当编写SQL语句和VBA代码时,最好谨慎行事,当你不能控制对象、字段的名称时,就加上括号。

注意:

在SQL Server和MS Access中,方括号在查询过滤器中使用时有特殊含义。方括号用于指定一个字符集或字符范围,如”[A-Z]”可以匹配从’A’到’Z’的任何单个字符。为了明确地匹配方括号,方括号符号必须与字符集中的左括号一起使用,如”[[]”。例如,如果查询的目的是寻找包含精确字符串 “fore [TAG] aft “的字段,则使用 “fore [[]TAG] aft”。注意,右方括号不需要任何特殊处理。

参考:

SQL Statements, To Square Bracket Or Not? | DEVelopers HUT

Using square brackets in query filters on SQL Server and MS Access


版权声明:本文为guoqx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。