Criei um pacote SSIS para executar sp_blitz em meus servidores de produção. O procedimento armazenado funciona bem para servidores com uma versão superior a 2012, mas falha para 2008 e 2005.
Encontre a mensagem de erro subsequente que recebi ao executar o pacote.
[SP Call [50]] Erro: Código de erro SSIS DTS_E_OLEDBERROR. Ocorreu um erro de OLE DB. Código de erro: 0x80040E14. Um registro OLE DB está disponível. Origem: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Descrição: "Não foi possível preparar a(s) instrução(ões).". Um registro OLE DB está disponível. Fonte: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Descrição: "Sintaxe incorreta perto de 'RESULT'.".
Eu pesquisei sobre o erro e descobri que o recurso EXECUTE WITH RESULT SETS foi introduzido em 2012. Assim, a execução do procedimento armazenado com RESULT SETS falha em versões inferiores. Estou usando a consulta abaixo para executar o procedimento armazenado.
EXEC sp_Blitz WITH RESULT SETS (
(
Priority TINYINT ,
FindingsGroup VARCHAR(50),
Finding VARCHAR(200),
DatabaseName NVARCHAR(128),
URL VARCHAR(200),
Details NVARCHAR(4000),
QueryPlan XML NULL,
QueryPlanFiltered [NVARCHAR](MAX) NULL,
CheckID INT,
Server_Name sql_variant,
[Server_Version] varchar(128),
[Server_Edition] sql_variant,
[Server_Product_Level] sql_variant,
[Server_Product_Version] sql_variant
));
Metade dos meus servidores de produção são de 2008 e 2005. Existe algum comando ou método alternativo que possa ser usado para que também possa ser executado em versões inferiores.
Uma maneira de fazer isso se quiser influenciar os tipos de dados ou nomes de coluna é criar uma tabela intermediária para armazenar o resultado do procedimento armazenado e, em seguida, selecionar a partir dele.
Algo na linha de
Se seu objetivo for registrar a saída de sp_Blitz em table , use os parâmetros @OutputDatabaseName, @OutputSchemaName e @OutputTableName conforme descrito na documentação . Por exemplo, isso gravará o sp_BlitzOutput em uma tabela chamada DBAtools.dbo.BlitzResults:
Se seu objetivo for chamar procedimentos armazenados do SQL Server 2008 com SSIS , use a tarefa Executar SQL .