2013-11-25 3 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

Как определить первую таблицу в текущей базе данных. Один с минимальным идентификатором объекта или на основе буквенных символов? – 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 
Смежные вопросы