1

下面是两个脚本

  1. select *
  2. select count(*)

第一个给出错误,但第二个没有给出错误。

下面是sql server给出的错误

消息 263,级别 16,状态 1,行 1 必须指定要从中选择的表。

请问能说说原因吗?

注意:未指定表名。

提前致谢。

4

4 回答 4

5

之所以select count(*)有效是因为它默认为master数据库

如其他答案中所述,您必须指定表名。

于 2013-03-26T06:23:29.033 回答
1

select count(*)之所以有效,是因为count它是一个函数并返回一个标量值,因为from子句是可选的,它将成功执行,而*函数和标量值都不是它无法执行的原因。

选择

    [ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]

SELECT 语句中子句的顺序很重要。任何一个可选子句都可以省略,但是当使用可选子句时,它们必须以适当的顺序出现

所以选择后跟任何标量值将执行即选择1,选择'*'

于 2013-03-26T06:42:30.987 回答
1

SELECT *不是一个完整的查询

它应该是

SELECT * from MyTableName
于 2013-03-26T06:22:09.150 回答
0

一个查询中,要使其完整,您需要定义from子句。

SELECT * FROM <Table_Name>

第二个查询中,如果您没有指定要从中选择的表,则单个选择将只返回一行 - 因此 count(*) 将返回 1。

FROM子句是可选的,它一直以这种方式工作。所以你可以在不需要桌子的情况下做"SELECT 1""SELECT @val"等等。

在其他数据库系统中,有一个"DUAL"用一行调用的虚拟表,用于执行这样的 SELECT 语句,例如"SELECT 1 FROM dual;"

于 2013-03-26T06:36:54.433 回答