子查询语法错误

时间:2013-11-25 07:50:49

标签: sql sql-server

我不完全确定为什么这不起作用。我确定它是非常基本的SQL,我在某处遗漏了某些东西。

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

我收到此错误消息::

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

正确的输出应该只是一个数字,即当前数据库中第一个表中的行数。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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