Sql-Server

在 2008 SQL Server 及更低版本中執行 sp_blitz 時出錯

  • December 5, 2019

我創建了一個 SSIS 包來在我的生產伺服器中執行 sp_blitz。儲存過程對於版本高於 2012 的伺服器執行良好,但對於 2008 和 2005 則失敗。

請查找我在執行包時收到的後續錯誤消息。

$$ SP Call [50 $$] 錯誤:SSIS 錯誤程式碼 DTS_E_OLEDBERROR。發生 OLE DB 錯誤。錯誤程式碼:0x80040E14。OLE DB 記錄可用。來源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“無法準備語句。”。OLE DB 記錄可用。來源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“‘RESULT’ 附近的語法不正確。”。

我搜尋了這個錯誤,發現 EXECUTE WITH RESULT SETS 功能是在 2012 年引入的。因此,使用 RESULT SETS 執行儲存過程在較低版本中失敗。我正在使用以下查詢來執行儲存過程。

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
));

我的生產伺服器有一半是 2008 和 2005。是否有任何替代命令或方法可以使用,以便它也可以在較低版本中執行。

如果您的目標是將 sp_Blitz 的輸出記錄到表中,請使用文件中所述的 @OutputDatabaseName、@OutputSchemaName 和 @OutputTableName 參數。例如,這會將 sp_BlitzOutput 寫入名為 DBAtools.dbo.BlitzResults 的表中:

sp_Blitz @OutputDatabaseName = 'DBAtools', 
 @OutputSchemaName = 'dbo', 
 @OutputTableName = 'BlitzResults';

如果您的目標是使用 SSIS 呼叫 SQL Server 2008 儲存過程,則使用執行 SQL 任務

如果您想影響數據類型或列名,您可以採取的一種方法是創建一個中間表來儲存儲存過程的結果,然後從中進行選擇。

類似的東西

CREATE TABLE #temp (< column definitions like the stored procedure returns >);

INSERT INTO #temp EXEC sp_Blitz;

SELECT < CAST columns to data types you want > AS < alias column names to names you want > 
FROM #temp;

引用自:https://dba.stackexchange.com/questions/254844