如何获取SQL Server中特定数据库中没有记录的所有表的列表。
由于
答案 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