在许多遗留数据库系统中,业务逻辑通常写在存储过程中,因此实时场景中不可能更改所有现有的存储过程对象。本文将展示一种方法,通过少量的T-SQL代码,将存储过程的结果导出到表中,而无需更改现有的数据库设计和架构,也无需使用其他编程语言和工具。
导出存储过程到表中通常是为了满足日常业务智能和报告需求。在数据库中执行此操作后,不同的应用程序可以从前端或后端的其他对象中使用它来根据用户的选择创建表。
代码使用了SQL Server对象OPENQUERY来创建表。有关OPENQUERY功能及其选项的更多信息,请参考以下在线文档:
有关PATINDEX函数的信息,请参考。
有关SUBSTRING函数的信息,请参考。
OPENQUERY、PATINDEX、SUBSTRING和SP_EXECUTESQL的解释超出了本文的范围。
XportStoredProc对象将在数据库中创建一个表,存储过程的名称将传递给它(例如:StoredProcedureName_Report)。通常在SQL Server中创建一个新数据库,并将所有表导出到其中,该数据库没有太多流量,像临时数据库一样使用。用户可以根据自己的需要决定如何使用它。
ServerOption应该被打开,'DATA ACCESS'选项需要在SQL Server上设置为TRUE。用户应该有权限执行这个ServerOption对象。
DECLARE @Server VARCHAR(50);
SET @Server = @@SERVERNAME;
-- This ServerOption Should be Turned on to use the OPENQUERY function.
EXEC sp_serveroption @Server, 'DATA ACCESS', 'TRUE';
XportStoredProc存储过程对象可以处理'n'个参数。以下是一些示例,展示了如何向此对象提供参数。
exec [XportStoredProc] 'StoredProcedureName2', 2;
exec [XportStoredProc] 'StoredProcedureName1', '''Test''';
exec [XportStoredProc] 'StoredProcedureName', 'AFA', 1, 'Afghani';
exec [XportStoredProc] 'StoredProcedureName';
注意:如果将存储过程两次传递给XportStoredProc对象,它将删除表(如果存在)并用新数据集重新创建它。
这个实用程序对象被命名为'XportStoredProc',可以根据用户的喜好进行更改。默认情况下,代码中的架构设置为'dbo',如果需要设置为不同的架构,则需要更改它。
上述步骤的演示表明,可以使用少量的T-SQL代码将存储过程的输出导出到表中,而无需重新编码或重新设计现有的数据库存储过程。因此,可以得出结论,这个T-SQL存储过程(XportStoredProc)对象只需很少的编程就可以从用户选择的任何存储过程中提取输出。
希望本文能够达到目的。欢迎任何建议或更正。
基本上,在从存储过程提取业务逻辑到表中之后,现在需要将其导出到某种形式的展示中。然后,在早期文章中展示的通用自动化SSIS包将非常方便地完成展示工作。