Нужен скрипт / курсор, который запускается на сервере, чтобы посмотреть временные данные на всех размещенных базах данных - PullRequest
0 голосов
/ 19 апреля 2019

Я настроил CMS, настроил список всех моих серверов.Я хочу иметь возможность запускать скрипт на сервере для просмотра временных таблиц, которые существуют во всех базах данных, размещенных на сервере.Я хочу удалить всю временную таблицу, которая начинается с 'temp_%'.В настоящее время у меня есть 14 баз данных на одном сервере.

declare @sql nvarchar(max)
SET @sql = N'select name from [@DBName].sys.tables'

DECLARE @DBName4Loop sysname
declare @sql4Loop nvarchar(max)

DECLARE dbcursor CURSOR FAST_FORWARD FOR SELECT name FROM sys.databases

OPEN dbcursor

FETCH NEXT FROM dbcursor INTO @DBName4Loop

WHILE @@FETCH_STATUS = 0
BEGIN
    print @DBName4Loop
  SET @sql4Loop = REPLACE(@sql, '[@DBName]', '['+@DBName4Loop+']')
  EXEC SP_EXECUTESQL @sql4Loop
  FETCH NEXT FROM dbcursor INTO @DBName4Loop
END

CLOSE dbcursor
DEALLOCATE dbcursor

Я хочу иметь возможность отбрасывать таблицы сразу, а не запускать все сразу.

1 Ответ

0 голосов
/ 19 апреля 2019

следующий скрипт сделает работу:

DECLARE @DBName sysname
DECLARE dbcursor CURSOR FAST_FORWARD FOR SELECT name FROM sys.databases WHERE name NOT IN ('master','tempdb','msdb')

OPEN dbcursor

FETCH NEXT FROM dbcursor INTO @DBName

WHILE @@FETCH_STATUS = 0
BEGIN
  EXEC('USE ' + @DBName)

  DECLARE @tmpTable sysname = (SELECT TOP 1 name FROM sys.tables WHERE name LIKE 'temp_%')

  WHILE @tmpTable IS NOT NULL
  BEGIN

    EXEC('DROP TABLE ' + @tmpTable)

    SELECT @tmpTable = name
    FROM sys.tables
    WHERE name LIKE 'temp_%'

  END

  FETCH NEXT FROM dbcursor INTO @DBName
END

CLOSE dbcursor
DEALLOCATE dbcursor

Курсор выполняет итерацию по базам данных, и цикл while удаляет следующую найденную таблицу с префиксом «temp_», пока они есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...