Kenny00
@Kenny00

Как выполнить запрос сразу ко всем базам MSSQL 2019?

Одним запросом получаем список всех баз на сервере, ну и какая у них модель восстановления
SELECT name,recovery_model_desc AS Recovery_model 
FROM sys.databases 
WHERE name NOT IN ('model','master','tempdb','msdb')
ORDER BY recovery_model_desc, name

Вторым запросом приходится, заходить в каждую базу и спрашивать столбец
SELECT *, DB_NAME() as [DBase] FROM _YearOffset;
Как одним запросом выбрать список баз, с нужными данными о них?
[ name ] [ Recovery_model ] [ _YearOffset ]
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Динамические запросы по курсору первого запроса.
DECLARE @DBD TABLE ( [Name] VARCHAR(100), [Recovery Model] INT, [Offset] INT)
DECLARE @N NVARCHAR(100), @R INT, @F INT
DECLARE @Q NVARCHAR(100), @P NVARCHAR(100) = '@FF INT OUTPUT'
DECLARE DB CURSOR FOR
  SELECT [name], [recovery_model]
    FROM sys.databases
    WHERE owner_sid <> 0x01
OPEN DB
FETCH NEXT FROM DB INTO @N, @R
WHILE @@FETCH_STATUS = 0
  BEGIN
    SET @Q = 'SELECT @FF = Offset FROM ' + @N + '.[dbo].[_YearOffset]'
    BEGIN TRY  
      EXECUTE sp_executesql @Q, @P, @FF = @F OUTPUT
    END TRY  
    BEGIN CATCH  
      SET @N = @N + ' Not 1C'
      SET @F = NULL
    END CATCH      
    INSERT @DBD VALUES (@N, @R, @F)
    FETCH NEXT FROM DB INTO @N, @R
  END
CLOSE DB
DEALLOCATE DB
SELECT * FROM @DBD
GO
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы