2013-11-25 116 views
1

我不完全確定爲什麼這不起作用。我確定它非常基本的SQL,並且我在某處丟失了某些東西。子查詢語法錯誤

SELECT COUNT(*) 
FROM (SELECT MIN(sys.tables.name) 
     FROM sys.tables) 

我收到此錯誤消息::

Msg 102, Level 15, State 1, Line 4 Incorrect syntax near ')'. 

正確的輸出應該只是一個號碼,排在第一個表在當前數據庫的數量。

+0

如何確定當前數據庫中的第一個表。一個具有最小的對象ID或基於字母字符? – Deepshikha

回答

2

爲了讓您的查詢工作,剛剛過去的)和別名名稱後添加別名列:

SELECT COUNT(*) 
FROM (SELECT MIN(sys.tables.name) as name FROM sys.tables) as A 

但是這一次將不會返回你number of rows in the first table in the current database。它只會返回1,因爲這個子查詢中有一條記錄。要獲取的行數在第一個表在當前數據庫中,你必須使用動態SQL,是這樣的:

declare @Table_Name nvarchar(128), @stmt nvarchar(max) 

select @Table_Name = min(name) from sys.tables 

select @stmt = 'select ''' + @Table_Name + ''' as Table_Name, count(*) from ' + @Table_Name 

exec sp_executesql @stmt = @stmt 
+0

是的,您創建的任何新表必須有別名,或者存在SQL錯誤 – nrathaus

+0

謝謝!我會嘗試的。作爲單獨的查詢工作,獲取第一個表,然後獲得該表的計數。我以爲一起工作,但我看到我的邏輯錯誤在這裏!它將返回一個int值。 XD。 – zenrumi

0

要在第一時間拿到表中的行數當前數據庫,你可以編寫一個查詢作爲:

SELECT SUM(pa.rows) RowCnt 
FROM sys.tables ta 
INNER JOIN sys.partitions pa 
ON pa.OBJECT_ID = ta.OBJECT_ID 
WHERE ta.name =(SELECT MIN(T.name) FROM sys.tables T) 
GROUP BY ta.name