Sql server 生成脚本,为SSRS中的每条记录创建报告

Sql server 生成脚本,为SSRS中的每条记录创建报告,sql-server,tsql,reporting-services,Sql Server,Tsql,Reporting Services,在SSRS中,可以使用参数将报告导出为特定格式。例如,我可以添加到urlrs:format=PDF,以将报告导出为PDF文件。导出时,报告以pdf文件的形式出现,报告名称为实际报告的标题。我意识到在SSRS中,没有办法在下载报告时为其指定具体名称 但是,我们有10k条记录,用户希望自动导出这些记录,例如pdf导出。我不想在那里创建10k个不同的数据驱动订阅,并为参数指定记录的ID值。我得做10公里 有没有一种更简单的方法可以将我的所有记录导出到一种特定的格式,其中包含报告的名称和记录的ID??例

在SSRS中,可以使用参数将报告导出为特定格式。例如,我可以添加到url
rs:format=PDF
,以将报告导出为PDF文件。导出时,报告以pdf文件的形式出现,报告名称为实际报告的标题。我意识到在SSRS中,没有办法在下载报告时为其指定具体名称

但是,我们有10k条记录,用户希望自动导出这些记录,例如pdf导出。我不想在那里创建10k个不同的数据驱动订阅,并为参数指定记录的ID值。我得做10公里

有没有一种更简单的方法可以将我的所有记录导出到一种特定的格式,其中包含报告的名称和记录的ID??例如,我们为每个记录使用自动编号id,因此一个pdf可能命名为12.pdf,下一个命名为13.pdf,等等。但这应该根据需要随时运行


是否有人知道我是否可以通过tsql或存储过程执行此操作?

右键单击您的SSRS报告,然后按照以下路径操作:

管理>订阅>新建订阅>数据驱动订阅

阅读更多信息。但长话短说,您可以按照描述设置参数,然后通过sql单元格填充它

逐步:

  • 在“订阅”窗格中,单击“新建订阅”
  • 在“订阅类型”单选按钮中,确保单击“数据驱动订阅”而不是“标准订阅”
  • 在“目标”下拉列表中,选择“windows文件共享”
  • 在“数据集”部分,单击“编辑数据集”。建立连接,编写sql查询。在您的例子中,是一个10000行的sql查询,它为每个不同的报告输出不同的“标题”或类似名称的列。您可能还希望输出一个“文件名”字段
  • 根据需要进行验证,然后单击“应用”返回上一屏幕
  • 在“交付选项”部分中,选择“值的来源”部分中的“从数据集获取值”作为文件名,并引用在步骤4中创建的文件名列
  • 手动写入路径,手动选择渲染格式,并根据需要完成任何其他选项
  • 在报告参数中,为ssrs报告中的标题参数选择“从数据集获取值”。然后引用在步骤4中创建的“标题”字段
  • 根据需要填写其他单元格
  • 单击“创建订阅”
  • 下面是一个可视化教程,其中包含我自己的不同报告的实现:


    右键单击您的SSRS报告,然后按照以下路径操作:

    管理>订阅>新建订阅>数据驱动订阅

    阅读更多信息。但长话短说,您可以按照描述设置参数,然后通过sql单元格填充它

    逐步:

  • 在“订阅”窗格中,单击“新建订阅”
  • 在“订阅类型”单选按钮中,确保单击“数据驱动订阅”而不是“标准订阅”
  • 在“目标”下拉列表中,选择“windows文件共享”
  • 在“数据集”部分,单击“编辑数据集”。建立连接,编写sql查询。在您的例子中,是一个10000行的sql查询,它为每个不同的报告输出不同的“标题”或类似名称的列。您可能还希望输出一个“文件名”字段
  • 根据需要进行验证,然后单击“应用”返回上一屏幕
  • 在“交付选项”部分中,选择“值的来源”部分中的“从数据集获取值”作为文件名,并引用在步骤4中创建的文件名列
  • 手动写入路径,手动选择渲染格式,并根据需要完成任何其他选项
  • 在报告参数中,为ssrs报告中的标题参数选择“从数据集获取值”。然后引用在步骤4中创建的“标题”字段
  • 根据需要填写其他单元格
  • 单击“创建订阅”
  • 下面是一个可视化教程,其中包含我自己的不同报告的实现:


    所以您提到没有enterprise edition,而且似乎只有enterprise edition具有数据驱动订阅

    还有另一种方法。您可以通过C#中的WebClient执行SSR

    首先,通过SQL动态捕获参数:

    class parameterRow {
        public string fileName;
        public string active;
    }
    
    ... 
    
    var parameterRows = new List<parameterRow>();
    
    var sql = @"
    
        select      fileName = 'activeRecords.pdf', 
                    active = 'Active' 
        
        union all
        select      fileName = 'inactiveRecords.pdf', 
                    active = 'Inactive'
        
    ";
    
    using (var con = new SqlConnection("server=someServer;database=someDB;trusted_connection=yes"))
    using (var cmd = new SqlCommand(sql, con)) {
        
        con.Open();
        
        using (var rdr = cmd.ExecuteReader()) 
            while (rdr.Read()) 
                parameterRows.Add(new parameterRow {
                    fileName = rdr[0].ToString(),
                    active = rdr[1].ToString()
                });
                
    }
        
    

    显然,您可能不需要压缩,但由于它是我获取的旧代码的一部分,我想我会保留该功能,以防它有用。

    所以您提到您没有enterprise edition,而且似乎只有enterprise edition具有数据驱动订阅

    还有另一种方法。您可以通过C#中的WebClient执行SSR

    首先,通过SQL动态捕获参数:

    class parameterRow {
        public string fileName;
        public string active;
    }
    
    ... 
    
    var parameterRows = new List<parameterRow>();
    
    var sql = @"
    
        select      fileName = 'activeRecords.pdf', 
                    active = 'Active' 
        
        union all
        select      fileName = 'inactiveRecords.pdf', 
                    active = 'Inactive'
        
    ";
    
    using (var con = new SqlConnection("server=someServer;database=someDB;trusted_connection=yes"))
    using (var cmd = new SqlCommand(sql, con)) {
        
        con.Open();
        
        using (var rdr = cmd.ExecuteReader()) 
            while (rdr.Read()) 
                parameterRows.Add(new parameterRow {
                    fileName = rdr[0].ToString(),
                    active = rdr[1].ToString()
                });
                
    }
        
    

    显然,您可能不需要压缩,但由于这是我获取的旧代码的一部分,我想我会保留该功能,以防它有用。

    我知道如何创建订阅-这不是我的问题。但是,我如何使用动态参数创建此订阅,并让它运行,然后说将文件保存到网络上,然后继续下一步。我不想创建10k订阅。“数据驱动”订阅与普通订阅不同。它们允许您动态设置参数。我添加了第二个“here”链接,这可能是一个更好的示例,尽管我试图找到另一个利用了多行示例的示例。此外,我正在研究是否可以将数据保存到网络驱动器。奇怪的是,我没有将数据驱动视为一个选项,事实上我看到的只是订阅->新建订阅。pwilcox没有单选按钮列表。我们运行的是标准版而不是企业版……我在几年前通过c#完成了这项工作,但我必须搜索代码。如果明天没有人发布答案,我会尝试搜索并发布另一个答案