我创建了一个 SSIS 包来在我的生产服务器中运行 sp_blitz。存储过程对于版本高于 2012 的服务器运行良好,但对于 2008 和 2005 则失败。
请查找我在运行包时收到的后续错误消息。
[SP 调用 [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 的表中:
如果您的目标是使用 SSIS 调用 SQL Server 2008 存储过程,则使用执行 SQL 任务。