如何在SSRS中显示带格式的Stored Procedure文本?
在SSRS中展示带原始格式的存储过程脚本可行方案
问题描述
我需要在SSRS报表中展示一组存储过程的文本内容,虽然能通过系统表轻松获取,但用户要求文本必须和数据库中的格式完全一致(包含换行、缩进)。之前试过用XML,但没法生成SSRS能读取的表格输出。
补充说明:希望存储过程脚本在SSRS里呈现成这样的格式:
Create proc dbo.sp_role_member @ID varchar(10) @Role bit output as begin select @Role = ( select count(*) from Activity where activity_type = 'XP' and select_date < getdate()....etc
而不是从系统表取出的无格式内容:
Create proc dbo.sp_role_member @ID varchar(10) @Role bit output as begin select @Role = (select count(*) from Activity where activity_type = 'XP' and select_date < getdate()...etc
可行实现方法
方法1:字符串替换+SSRS HTML解析
SQL Server的系统表(如sys.sql_modules)里的存储过程文本其实保留了换行、缩进的控制字符(CHAR(10)换行、CHAR(9)制表符),只是默认查询显示时会被压缩。可以通过字符串替换把这些控制字符转成SSRS能识别的HTML标记:
- 编写查询时,把控制字符替换成HTML换行
<br>和缩进 :
SELECT name AS 存储过程名称, REPLACE(REPLACE(OBJECT_DEFINITION(object_id), CHAR(10), '<br>'), CHAR(9), ' ') AS 格式化脚本 FROM sys.procedures -- 按需添加筛选条件,比如WHERE name LIKE 'sp_%'
- 在SSRS报表中,选中展示脚本的文本框,在“属性”里把“标记类型”设置为“HTML”,这样报表就会解析HTML标记,呈现出带换行和缩进的格式。
方法2:CLR函数精准还原格式
如果系统表中的文本丢失了原始格式信息(比如某些特殊场景下的存储过程),可以创建CLR函数直接读取数据库中存储的原始带格式脚本,再返回给SSRS。这种方式还原度最高,但需要开启SQL Server的CLR功能,并部署自定义的CLR函数。
方法3:批量导出脚本后导入
如果存储过程数量不多,直接在SSMS里批量导出带格式的脚本:右键目标数据库→任务→生成脚本,选择要导出的存储过程,设置脚本选项里的“包含格式”为启用,把导出的脚本存入自定义表中,再让SSRS从这个表读取内容。这种方式操作简单,格式完全准确,但需要定期同步脚本内容,适合存储过程变动不频繁的场景。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

