每个表格中没有记录

时间:2017-12-24 10:33:00

标签: sql sql-server

如何获取SQL Server中特定数据库中没有记录的所有表的列表。

由于

3 个答案:

答案 0 :(得分:0)

这是另一种选择 - 不依赖于INFORMATION_SCHEMA。 这也允许你改变你的where子句(你可以相应地编辑你的@QUERY)。

DECLARE @QUERY VARCHAR(MAX)
SET @QUERY = ''

/*
 * Create a long query with a row count + table name.
 * You may alter your where clause here
 */
SELECT @QUERY =
    @QUERY + ' SELECT COUNT(*), ''' + QUOTENAME(name)
    + ''' FROM ' + QUOTENAME(name) + CHAR(13)
    + 'UNION ALL'
    FROM sys.tables

--Get rid of the last 'UNION ALL'...
SELECT @QUERY = LEFT(@QUERY, LEN(@QUERY) - 10) 

--Prepare a temp table - drop if exists and then create it
IF object_id('tempdb..#TableResults') IS NOT NULL
DROP TABLE #TableResults

CREATE TABLE #TableResults(
    Count INT,
    TableName VARCHAR(MAX) 
);

--Insert the main query result into the temp table
INSERT INTO #TableResults
EXEC(@QUERY);

--Select all from the temp table
SELECT * FROM #TableResults
WHERE COUNT = 0

答案 1 :(得分:0)

您需要使用Dynamic SQL并检查每个表中是否存在行

declare @sql    nvarchar(max)

select  @sql    = isnull(@sql + ' union all ' + char(13) , convert(nvarchar(max), ''))
        + 'select tbl_name = ''' + name + ''' '
        + 'where not exists (select * from ' + quotename(name) + ')'
from    sys.tables

print   @sql

exec    (@sql)

答案 2 :(得分:-3)

你的意思是

SELECT COUNT(*) FROM
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN 
(
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE')

Saravanan

相关问题