在SQL Server 2008中运行查询时是否需要包含方括号[]?

时间:2012-02-09 18:56:42

标签: sql sql-server-2008

我安装了SQL Server 2008 Express Edition,这是我第一次运行SQL查询。我注意到,如果我选择显示前1000行,查询将括号[]放在数据库名称及其各自的列周围。

  1. 为什么数据库名称和列周围有括号?
  2. 是否需要有这些?如果是这样的话?

3 个答案:

答案 0 :(得分:5)

我刚刚在dba.stack上发布了这个答案。

它们会转义不“友好”的名称 - 如果您的数据库名称包含特殊字符(例如空格,点或短划线)或表示SQL关键字(例如USE或{{1}),它们会很有用} :-))。如果没有方括号,这样的查询将失败:

DATABASE

但是,如果以这种方式编写查询,则忽略关键字:

SELECT column FROM database.dbo.table;

在构建脚本或编写从元数据生成脚本的解决方案时(例如,生成所有表或所有索引的脚本),我总是将实体名称包装在方括号中,这样无论实现了什么类型的名称,它们都可以工作(对于我控制的系统,我并不总是如此)。您可以使用SELECT [column] FROM [database].dbo.[table]; 函数轻松完成此操作,例如:

QUOTENAME

结果:

SELECT QUOTENAME('table'), QUOTENAME('column'), QUOTENAME('database');

如果你在这里搜索[table] [column] [database] 的答案,你会发现我在许多脚本中使用它,我帮助人们自动生成脚本或构建动态SQL。如果没有方括号,很多人会遇到运行脚本的问题。

答案 1 :(得分:3)

在方括号中包含一个字符串告诉SQL Server它不应该尝试解析它们内部的任何内容。这允许您使用SQL保留字(selecttablereturn等)以及标识符中的空格。它们仅在这些情况下是必需的,但它们在任何情况下都无害。

答案 2 :(得分:1)

没有,但它确保如果你有一个名为保留或关键字的数据库,表或列,例如date,它就不会与该关键字混淆。