日期:2014-05-17  浏览次数:20464 次

请问如何查出数据库中有数据的所有的表名来
use test
go
select name into #tab from sysobjects where xtype='U'--得到所有表名




use test
go
select count(1) from sysobjects where xtype='U'--得到表的数量


if exists (select * from 表名 )--判断表里是否有数据
sql 数据库

------解决方案--------------------
IF OBJECT_ID('tempdb.dbo.#TB') IS NOT NULL
DROP TABLE #TB 
GO
create table #TB([name] VARCHAR(500))
DECLARE @Name VARCHAR(500),@SQL VARCHAR(MAX)
DECLARE NAME CURSOR
FOR
SELECT name FROM sysobjects where xtype='U'
OPEN NAME
FETCH NEXT FROM NAME INTO @Name
WHILE @@FETCH_STATUS=0
BEGIN 
SET @SQL='
INSERT INTO #tb SELECT name FROM (select name,COUNT(1) AS num from syscolumns where id=object_id('+@NAME+') GROUP BY name HAVING COUNT(1)>0)t'
EXEC (@sql)
FETCH NEXT FROM NAME INTO @NAME
END
CLOSE NAME
DEALLOCATE NAME
GO

--SELECT * FROM #TB

------解决方案--------------------
如果是2005及以后的版本,试试这个:

select t.name
from sys.tables t
inner join sys.partitions p
        on t.object_id = p.object_id

where p.rows >0   --数据行数大于0


------解决方案--------------------
这个适合sql server 2000,试试:
select distinct o.name
from sysobjects o
inner join sysindexes i
        on o.id = i.id
where xtype = 'U'
      and i.rows > 0 --数据行数大于0的

------解决方案--------------------

select a.name 'TableName',b.rowcnt
 from sys.tables a
 inner join sys.sysindexes b on a.object_id=b.id and b.indid<=1
 where b.rowcnt>0