Я хочу запустить диагностический отчет на нашем сервере базы данных SQL Server 2008.SQL Server: Вы можете помочь мне с этим запросом?
Я просматриваю все базы данных, а затем для каждой базы данных, я хочу посмотреть на каждую таблицу. Но, когда я смотрю на каждую таблицу (с tbl_cursor
), она всегда подбирает таблицы в базе данных 'master'
.
Я думаю, что это из-за моего tbl_cursor
выбора:
SELECT table_name FROM information_schema.tables WHERE table_type = 'base table'
Как это исправить?
Вот весь код:
SET NOCOUNT ON
DECLARE @table_count INT
DECLARE @db_cursor VARCHAR(100)
DECLARE database_cursor CURSOR FOR
SELECT name FROM sys.databases where name<>N'master'
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @db_cursor
WHILE @@Fetch_status = 0
BEGIN
PRINT @db_cursor
SET @table_count = 0
DECLARE @table_cursor VARCHAR(100)
DECLARE tbl_cursor CURSOR FOR
SELECT table_name FROM information_schema.tables WHERE table_type = 'base table'
OPEN tbl_cursor
FETCH NEXT FROM tbl_cursor INTO @table_cursor
WHILE @@Fetch_status = 0
BEGIN
DECLARE @table_cmd NVARCHAR(255)
SET @table_cmd = N'IF NOT EXISTS(SELECT TOP(1) * FROM ' + @table_cursor + ') PRINT N'' Table ''''' + @table_cursor + ''''' is empty'' '
--PRINT @table_cmd --debug
EXEC sp_executesql @table_cmd
SET @table_count = @table_count + 1
FETCH NEXT FROM tbl_cursor INTO @table_cursor
END
CLOSE tbl_cursor
DEALLOCATE tbl_cursor
PRINT @db_cursor + N' Total Tables : ' + CAST(@table_count as varchar(2))
PRINT N'' -- print another blank line
SET @table_count = 0
FETCH NEXT FROM database_cursor INTO @db_cursor
END
CLOSE database_cursor
DEALLOCATE database_cursor
SET NOCOUNT OFF
@rib: нет такой вещи, как «MS SQL». Продукт называется «SQL Server». «MS SQL» можно смутить с «MySQL» слишком легко. –