在SSRS中使用tablename作为变量

时间:2017-09-11 13:19:13

标签: sql-server reporting-services

我有一个报告服务项目,我负责根据哪个"开始日期"来显示来自数据库中不同表的数据。用户在参数中选择。

如果用户选择"开始日期"成为" 01-01-2016"那么数据集查询中的表名应该是" userdata_2016"和" userdata_2017"如果"开始日期"设置为01-01-2017。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用表值函数来联合所有年份表,并将@start_date作为变量传递:

SELECT * FROM userdata_2016 WHERE Year(@start_date) = 2016

UNION ALL

SELECT * FROM userdata_2017 WHERE Year(@start_date) = 2017

另一种选择是使用stored procedure

DECLARE @sqlCommand varchar(1000)

SET @sqlCommand = 'SELECT * FROM userdata_' + CAST(YEAR(@StartDate) AS  nvarchar(4))

EXEC (@sqlCommand)

答案 1 :(得分:0)

奇怪的是,表格按年份分开,除非每个表格中的数据不同,否则不会合并到一个表格中。 Union all是一种方法,但如果数据不同或者您不想加载所有表中的所有数据,则可以使用 IF ... ELSE 语句来包含每个查询

举个例子:

IF YEAR(@startDate) = 2016
    SELECT * FROM userdata_2016;
IF YEAR(@startDate) = 2017
    SELECT * FROM userdata_2017;
ELSE
    SELECT * FROM blah;

不需要其他声明,但我将其用于演示目的。