2

我有一个 SQL Server 2005 查询,我在 Select 语句中使用 case 语句。我想知道“正确”的做法是什么。

每种格式似乎都可以正常工作,但我想知道不同选择之间是否存在一些冗余或其他内容。

样本格式:

SELECT 'isItemDisplayed' = CASE WHEN ... THEN ... END FROM myTable

SELECT isItemDisplayed = CASE WHEN ... THEN ... END FROM myTable

SELECT CASE WHEN ... THEN ... END AS isItemDisplayed FROM myTable

SELECT CASE WHEN ... THEN ... END AS 'isItemDisplayed' FROM myTable

SELECT CASE WHEN ... THEN ... END isItemDisplayed FROM myTable
4

4 回答 4

3

Referencing the example at the bottom of this page, I would say:

SELECT CASE WHEN ... THEN ... END AS isItemDisplayed FROM myTable

because it explicitly defines isItemDisplayed as the name.

I personally would prefer:

SELECT CASE WHEN ... THEN ... END AS [isItemDisplayed] FROM myTable

because it covers for reserved words(even though you should never name anything the same as a reserved word) and you can include spaces.

According to this blog, not using any explicit identifier(= Or As) is poor practice.

There is no advantage to using single quotation marks around an alias, besides the SSMS showing the name as a different color, maybe making it stick out?

于 2013-10-15T19:28:19.850 回答
2

这实际上与 CASE 语句无关。您可以为选择列表中的任何表达式创建列别名,包括简单的列名(即:重命名以匹配客户端代码)、文字表达式、函数调用等。但是继续您的 CASE 示例,有一些事情要知道。

我几乎从不这样看,但 ANSI Sql 标准说要使用双引号作为名称,如下所示:

SELECT CASE WHEN ... THEN ... END "isItemDisplayed" FROM myTable

我通常看到的是您原始问题的第 3 或第 5 个选项,如下所示。两者都可以:

SELECT CASE WHEN ... THEN ... END As isItemDisplayed FROM myTable

SELECT CASE WHEN ... THEN ... END isItemDisplayed FROM myTable

[]如果您想要一个与保留字冲突或使用空格的名称,其中任何一个都允许您将名称括在方括号 ( ) 中。我会避免使用任何=语法,因为它可能会使您正在寻找布尔结果的人感到困惑。我可以在这里给出的另一点建议是选择一种风格并在当前环境中坚持下去。一致性!

于 2013-10-15T19:38:07.680 回答
0

我想你的问题是关于 ANSI SQL 标准和微软实现的特殊性

首先,1st = 2nd 语句,3rd=4th=5th,但 1st != 3rd,因为它比较,而 3-5 返回值 - 更新:对于 MS SQL,所有这些查询都是相同的,对于其他一些数据库,它们是可以不同

无论如何,我们可以将您的问题简化为以下两个问题:

转义标识符的正确方法是什么

如果您使用不能与保留字混合的标识符 - 您不需要用任何特殊符号将其括起来,但如果您不确定 - 最好使用它们

标准 SQL 将"符号定义为标识符分隔符,但 MS SQL 支持其他符号(如 []),因此您可以使用其中任何一个,但"更可取的是,请查看http://en.wikibooks.org/wiki/SQL_Dialects_Reference/Data_structure_definition/ Delimited_identifiers

我们应该使用AS还是不使用

关键字AS在 SQL 标准中是可选的,在 MS 实现中是可选的,但并非对所有 DBMS 都是如此

检查http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt - 关键字 [ AS ] - 这意味着本文档是可选的

最后回答:

确保您的查询始终按预期工作 - 使用转义和使用 AS 关键字,这将有助于您在另一个数据库的情况下,或者如果在新版本的 MS SQL 中引入一些不兼容的更改

所以,这个查询会更好:

SELECT CASE WHEN ... THEN ... END AS "isItemDisplayed" FROM "myTable"

于 2013-10-15T19:42:39.253 回答
0

我认为这是首选:-

SELECT CASE WHEN ... THEN ... END AS isItemDisplayed FROM myTable

前两个用于将 CASE 语句的结果与名称进行比较。最后一个是我们指定为 ALIAS 的结果。

刚刚发现这个链接很有趣(正如 Lamak 在评论中提到的那样):

就我个人而言,我发现别名周围的单引号会分散注意力,无论您使用哪种别名约定,都会使选择列表更难阅读。所有别名都是字符串;为什么我想让它看起来像是数据?另请注意,#5 和 #6 没有在任何标准中定义,它们似乎只是被允许进入语法

于 2013-10-15T19:26:25.887 回答