我看到有些人使用单引号别名列名称,例如:
select orderID 'Order No' from orders
和其他人使用方括号,例如:
select orderID [Order No] from orders
我倾向于使用方括号。有没有偏好/差异?
答案 0 :(得分:57)
回答“是否有任何偏好/差异”的问题:
是的,有很多偏好和意见一样,但要小心你采用的偏好。
作为最佳实践,如果不需要任何额外的工作,建议编写可移植的SQL。
对于您的特定示例,编写可移植查询同样容易:
select OrderId as "Order Id" from Orders
写一个非便携式的:
select OrderId as [Order Id] from Orders
当存在相同数量的击键的等效可移植形式时,编写非标准SQL是不合理的。
逃逸的[]扩散是由于像SQL Server Management Studio和MS Access查询构建器这样的工具,它们懒得逃避一切。对于在SQL Server中度过他/她职业生涯的开发人员来说,它可能永远不会发生,但是括号在多年来将Access和SQL Server应用程序移植到其他数据库平台上已经造成了很多费用。引用所有内容的Oracle工具也是如此。未经训练的开发人员将DDL视为示例,然后在手动编写时继续使用相同的样式。在工具改进并且我们要求更好之前,这是一个艰难的循环。在Oracle中,引用与混合大小写相结合会导致区分大小写的数据库。我看过人们引用数据库中每个标识符的项目,我感觉我在The Land of The Lost中,开发人员在没有文档或最佳实践文章的岛上进化。
如果您从头开始使用规范化的合法标识符(使用OrderId或order_Id而不是[Order Id])编写DDL,则不必担心可能需要转义字符的神秘关键字;数据库将通知当你使用了一个保留字时,我可以指望我们曾经将应用程序从一个版本的SQL Server升级到另一个版本,并因新保留字而导致任何破坏。
这通常是激烈辩论的主题,所以如果你以另一种方式思考:
C#程序员不会使用@转义所有变量,即使这样做是合法的。这将被视为一种奇怪的做法,并将成为StackOverflow上的嘲笑主题。逃逸应该是针对边缘情况。但编写符合C#标识符的相同开发人员并不介意在SQL中转义每个标识符,编写非常丑陋,不可移植的SQL“代码”。作为一名顾问,我遇到了不止一个SQL Server程序员,他们诚实地认为[]是必需的语法。我不怪开发者,我责怪工具。
答案 1 :(得分:6)
这取决于您有效的设置'
是否有效。你错过了"
。见Delimited Identifiers:
当QUOTED_IDENTIFIER设置为ON时,SQL Server遵循用于使用双引号(“)和在SQL语句中单引号(')的ISO规则,例如:
双引号只能用于分隔标识符。它们不能用于分隔字符串。
必须使用单引号括起字符串。它们不能用于分隔标识符。
当QUOTED_IDENTIFIER设置为OFF时,SQL Server对单引号和双引号使用以下规则:
引号不能用于分隔标识符。相反,括号必须用作分隔符。
单引号或双引号可用于括起字符串。
最后:
无论QUOTED_IDENTIFIER的设置如何,总是可以使用括号中的分隔符
在上述所有引号中,当他们引用括号时,他们正在谈论[]
括号。
答案 2 :(得分:4)
单引号更具可读性。如上所示,以红色突出显示。
MySQL使用`反引号`来转义特殊字符。
MSSQL可以使用"双引号"或[括号]用于标识符(表格,列等)
和单引号'用于字符串或别名。
方括号主要用于封装对象,以便特殊字符(如空格,句点或连字符)不会引发语法错误。
我建议使用' as'列别名之前的关键字 - 它更具可读性。
select [column with spaces] as 'my col' from "table with spaces" where n = 'foo'
select "column with spaces" as 'my col' from [table with spaces] where n = 'foo'
答案 3 :(得分:1)
引用方法可以让您这样做:
SELECT 1 AS 'bla[]bla'
答案 4 :(得分:0)
感谢 Justin Grant 在此主题的评论中 - 发布此内容是为了提高知名度。
如果我们接受一般偏好是主观的,但希望保持一致,那么就实际差异而言,有充分的理由不使用单引号 '
。如果您需要使用例如名称需要引用的列上的聚合函数,单引号会给您带来麻烦(直接从 Justin 的评论中复制/粘贴代码):
select sum ('foo') from (select 1 as 'foo') x
在我看来,这就是不使用单引号的充分理由 - 有些情况下您不能使用它们,这会妨碍一致性。
双引号 "
或括号 []
是唯一的方法。这归结为您更看重哪种一致性 - 与 SQL Server 特定工具可能生成的代码的一致性,将使用括号,或遵守 ANSI 标准,该标准指定双引号。在根深蒂固的 Microsoft 环境中,括号可能更有意义。如果没有,双引号可能是更好的做法。