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

标签 sql sql-server-2008

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

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

最佳答案

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

它们对不“友好”的名称进行转义 - 如果您的数据库名称包含特殊字符(例如空格、点或破折号)或表示 SQL 关键字(例如 USE数据库 :-))。如果没有方括号,这样的查询将失败:

SELECT column FROM database.dbo.table;

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

SELECT [column] FROM [database].dbo.[table];

在构建脚本或编写从元数据生成脚本的解决方案时(例如,生成所有表或所有索引的脚本),我总是将实体名称括在方括号中,这样无论实现了什么样的古怪名称,它们都能正常工作(我并不总是为我控制的系统这样做)。您可以使用 QUOTENAME 函数轻松完成此操作,例如:

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

结果:

[table] [column] [database]

如果您在此处搜索我对 QUOTENAME 的回答,您会发现我在很多脚本中都使用了它,我在这些脚本中帮助人们自动生成脚本或构建动态 SQL。如果没有方括号,很多人会在运行脚本时遇到问题。

关于sql - 在 SQL Server 2008 中运行查询时是否需要包含方括号 []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9217002/

相关文章:

mysql 外键错误 150

sql - 如果 where 条件为 !=?,则不使用数据库索引

asp.net - 以漂亮的布局显示记录

sql-server - SQL View : Join tables without causing the data to duplicate on every row?

mysql - SQL : select distinct of one column while ignoring other columns

sql - 如何使用占位符将列名值作为 SQL 参数传递

sql - 将 sql_variant 转换为以 varchar 形式提供的 data_type

sql - 根据一个月内的特定日期范围聚合多列

sql - 通过检查 sql 语句中的变量值使 where 子句可选

c# - SQL 服务器错误 : ExecuteNonQuery: Connection property has not been initialized