以下是两个脚本
select *
select count(*)
第一个出错,但第二个出错。
以下是sql server
给出的错误Msg 263,Level 16,State 1,Line 1 必须指定要选择的表。
你能说出原因吗?
注意:未指定表格名称。
提前致谢。
答案 0 :(得分:5)
select count(*)
的工作原因是因为它默认为master
数据库
如其他答案中所述,您必须指定一个表名。
答案 1 :(得分:1)
SELECT *
不是完整的查询
应该是
SELECT * from MyTableName
答案 2 :(得分:1)
select count(*)
有效,因为count
是一个函数并返回标量值,因为from
子句是可选的,它将成功执行,而*
既不是函数也不是标量值这就是它无法执行的原因。
来自SELECT
[ 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,选择'*'
答案 3 :(得分:0)
在1 st 查询中,为了使其完整,您需要定义from
子句。
SELECT * FROM <Table_Name>
在2 nd 查询中,如果未指定要选择的表,则单个选择将仅返回单行 - 因此count(*)将返回1。
FROM
子句是可选的,它始终以这种方式工作。因此,您可以执行"SELECT 1"
或"SELECT @val"
等操作,而无需使用表格。
在其他数据库系统中,有一个名为"DUAL"
的虚拟表,其中一行用于执行"SELECT 1 FROM dual;"