2017-12-24 19 views
-5

SQL Serverの特定のデータベースにレコードのないすべてのテーブルの一覧を取得する方法。各テーブルのレコードがありません

おかげ

+1

の行のexistanceのために確認する必要がありますか?または、レコードの「番号」の略語は「いいえ」ですか? –

答えて

-3

あなたはこの

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

Saravanan

+0

**テーブル**はカウントされますが、テーブルの行はカウントされません。 – SMor

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 
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) 
関連する問題