【问题标题】:Simple SELECT script giving error in Sql Server简单的 SELECT 脚本在 Sql Server 中给出错误
【发布时间】:2013-03-26 06:21:03
【问题描述】:

下面是两个脚本

  1. select *
  2. select count(*)

第一个出错,第二个没有出错。

下面是sql server给出的错误

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

你能说出原因吗?

注意:未指定表名。

提前致谢。

【问题讨论】:

标签: sql-server


【解决方案1】:

select count(*) 起作用的原因是因为它默认为master 数据库

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

【讨论】:

    【解决方案2】:

    SELECT * 不是一个完整的查询

    应该是

    SELECT * from MyTableName
    

    【讨论】:

      【解决方案3】:

      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,选择'*'

      【讨论】:

      • 你能解释一下吗?没有任何表格 count(*) 将如何工作?
      【解决方案4】:

      在1st查询中,要使其完整,需要定义from子句。

      SELECT * FROM <Table_Name>
      

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

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

      在其他数据库系统中,有一个名为"DUAL" 的虚拟表,其中一行用于执行诸如"SELECT 1 FROM dual;" 之类的SELECT 语句

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-30
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 2015-12-10
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多