我安装了SQL Server 2008 Express Edition,这是我第一次运行SQL查询。我注意到,如果我选择显示前1000行,查询将括号[]放在数据库名称及其各自的列周围。
答案 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保留字(select
,table
,return
等)以及标识符中的空格。它们仅在这些情况下是必需的,但它们在任何情况下都无害。
答案 2 :(得分:1)
没有,但它确保如果你有一个名为保留或关键字的数据库,表或列,例如date
,它就不会与该关键字混淆。