2013-03-26 42 views
0

給錯誤以下是兩個腳本簡單的SELECT腳本在SQL服務器

  1. select *
  2. select count(*)

1給出了一個錯誤,但第二個一個不給錯誤。

下面是由SQL Server

消息263,級別16,狀態1,行 給出必須指定表從選擇錯誤。

你能說出原因嗎?

注意:沒有指定表名。

在此先感謝。

+0

http://stackoverflow.com/questions/8398772/select-count – bummi 2013-03-26 06:31:10

回答

5

原因select count(*)的作品,是因爲它默認爲master數據庫

AS在其他的答案說你有指定一個表名。

+0

+1爲更合適的解釋填充答案 – asprin 2013-03-26 06:26:25

1

SELECT *不是一個完整的查詢

應該

SELECT * from MyTableName 
0

在1 st查詢,要使其完成,您需要定義from子句。

SELECT * FROM <Table_Name> 

在2 第二查詢,如果不指定表以供選擇,一個選擇將只返回一行 - 因此COUNT(*)將返回1

FROM子句是可選的,它一直以這種方式工作。所以你可以做"SELECT 1""SELECT @val"等等,不需要一張表。

在其他數據庫系統中,有一個名爲"DUAL"與用來做這樣的SELECT語句像"SELECT 1 FROM dual;"

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語句的順序是顯著。任何一個可選的子句都可以省略,但是當使用可選的子句時,它們必須以適當的順序出現

所以選擇後跟任何標量值將執行i。e選擇1,選擇'*'

+0

你能解釋一點嗎?無數表(*)如何工作? – Narendra 2013-03-26 06:48:30

+0

你可以現在檢查 – 2013-03-26 07:08:04

+0

好,很高興認識+1 – Narendra 2013-03-26 07:30:11