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

Pea*_*key 1 sql sql-server-2008

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

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

Aar*_*and 5

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

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

SELECT column FROM database.dbo.table;
Run Code Online (Sandbox Code Playgroud)

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

SELECT [column] FROM [database].dbo.[table];
Run Code Online (Sandbox Code Playgroud)

当构建脚本或编写生成的元数据的脚本解决方案(如生成所有表或全部索引的脚本),我一直包在方括号中的实体名称,使他们无论什么样靠不住的名字已经实施的工作(我并不总是为我控制的系统这样做.您可以使用QUOTENAME函数轻松完成此操作,例如:

SELECT QUOTENAME('table'), QUOTENAME('column'), QUOTENAME('database');
Run Code Online (Sandbox Code Playgroud)

结果:

[table] [column] [database]
Run Code Online (Sandbox Code Playgroud)

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