下面是两个脚本
select *
select count(*)
第一个给出错误,但第二个没有给出错误。
下面是sql server给出的错误
消息 263,级别 16,状态 1,行 1 必须指定要从中选择的表。
请问能说说原因吗?
注意:未指定表名。
提前致谢。
下面是两个脚本
select *
select count(*)
第一个给出错误,但第二个没有给出错误。
下面是sql server给出的错误
消息 263,级别 16,状态 1,行 1 必须指定要从中选择的表。
请问能说说原因吗?
注意:未指定表名。
提前致谢。
之所以select count(*)
有效是因为它默认为master
数据库
如其他答案中所述,您必须指定表名。
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,选择'*'
SELECT *
不是一个完整的查询
它应该是
SELECT * from MyTableName
在第一个查询中,要使其完整,您需要定义from
子句。
SELECT * FROM <Table_Name>
在第二个查询中,如果您没有指定要从中选择的表,则单个选择将只返回一行 - 因此 count(*) 将返回 1。
该FROM
子句是可选的,它一直以这种方式工作。所以你可以在不需要桌子的情况下做"SELECT 1"
或"SELECT @val"
等等。
在其他数据库系统中,有一个"DUAL"
用一行调用的虚拟表,用于执行这样的 SELECT 语句,例如"SELECT 1 FROM dual;"