Sql server SSRS 2008查询:所选参数中的表名

Sql server SSRS 2008查询:所选参数中的表名,sql-server,reporting-services,ssrs-2008,Sql Server,Reporting Services,Ssrs 2008,我有一个包含来自我的传感器名称的表的数据库。首先,我尝试使用底部类似的查询获取我的表名,以获取特定的表名 从sys.tables AS tbl中选择name作为TableName 其中(名称如“ATRH.%”) 然后在SSRS上的结果如下: 但是,如何在查询数据表中使用该参数作为表名呢 我已经尝试了一个简单的查询,如底部,但我得到一条错误消息,SSRS没有识别@PARAMETERTABLENAME 从@PARAMETERTABLENAME中选择顶部(1000)[SensorID]、[Time]

我有一个包含来自我的传感器名称的表的数据库。首先,我尝试使用底部类似的查询获取我的表名,以获取特定的表名

从sys.tables AS tbl中选择name作为TableName 其中(名称如“ATRH.%”)

然后在SSRS上的结果如下:

但是,如何在查询数据表中使用该参数作为表名呢

我已经尝试了一个简单的查询,如底部,但我得到一条错误消息,SSRS没有识别
@PARAMETERTABLENAME

从@PARAMETERTABLENAME中选择顶部(1000)[SensorID]、[Time]、[Value],其中(从@Start到@End之间的时间)

如何修复此问题?

您可以使用

EXEC sp_executesql @sql_cmd
我试过这样做:

DECLARE  @table varchar(50)
@table='[tmp_in_tashilat'+'_'+@rmz+']'

set @sql_cmd='select   COUNT(*)as cnt,ki into ki  from '+@table+' where (ki is not null) and ki<>'''' and knd='''+@compare+''' group by  ki  having COUNT(*)>1 ' 

EXEC(@sql_cmd)
DECLARE@table varchar(50)
@表='[tmp_in_tashilat'+'+@rmz+']
将@sql_cmd='select COUNT(*)设置为cnt,将ki从'+@table+'中(ki不为空)设置为ki,并将ki''和knd='+@compare+''分组,其中ki的计数(*)>1'
EXEC(@sql\u cmd)

您可以将此模板用于自己的查询

我认为它首先要使用full,您必须将其写入数据集的query=>query部分

EXEC('SELECT TOP (1000) [SensorID], [Time] ,[Value] FROM '+@PARAMETERTABLENAME+' where 
(Time BETWEEN '''+ @Start +''' AND '''+ @End+''')' 

然后设置数据集的参数部分中使用的每个参数,并设置为您在报告的参数部分中声明的参数在本周做了很多次之后,我得到了答案,我尝试使用此查询为参数选择数据库名称:

Select name AS SchemaName from sys.schemas
where name not in (
'guest',
'INFORMATION_SCHEMA',
'sys',
'db_owner',
'db_accessadmin',
'db_securityadmin',
'db_ddladmin',
'db_backupoperator',
'db_datareader',
'db_datawriter',
'db_denydatareader',
'db_denydatawriter')
SELECT DISTINCT TABLE_NAME AS TableName
        FROM            INFORMATION_SCHEMA.TABLES
        WHERE        (TABLE_TYPE = 'BASE TABLE') AND (TABLE_SCHEMA = @SchemaName) AND (TABLE_NAME LIKE 'ATRH.1.%' or
                                 TABLE_NAME LIKE 'ATRH.2.%' or
                                 TABLE_NAME LIKE 'ATRH.3.%' or
                                 TABLE_NAME LIKE 'ATRH.4.%')
        ORDER BY TableName
然后,我尝试使用dbname参数在以下查询中选择tablename:

Select name AS SchemaName from sys.schemas
where name not in (
'guest',
'INFORMATION_SCHEMA',
'sys',
'db_owner',
'db_accessadmin',
'db_securityadmin',
'db_ddladmin',
'db_backupoperator',
'db_datareader',
'db_datawriter',
'db_denydatareader',
'db_denydatawriter')
SELECT DISTINCT TABLE_NAME AS TableName
        FROM            INFORMATION_SCHEMA.TABLES
        WHERE        (TABLE_TYPE = 'BASE TABLE') AND (TABLE_SCHEMA = @SchemaName) AND (TABLE_NAME LIKE 'ATRH.1.%' or
                                 TABLE_NAME LIKE 'ATRH.2.%' or
                                 TABLE_NAME LIKE 'ATRH.3.%' or
                                 TABLE_NAME LIKE 'ATRH.4.%')
        ORDER BY TableName
然后,我添加了更多带有日期“开始”和“结束”的参数,以获取该2个日期范围内的数据

在sqlserver中,我使用此查询创建存储产品

ALTER PROCEDURE [dbo].[testAtrh]
@TableName nvarchar(128),
@Start nvarchar(128),
@End nvarchar(128)

AS
BEGIN
declare @sql NVARCHAR(MAX)

    SET @sql = N'SELECT [SensorID], [Time], [Value]
    FROM' +quotename(@TableName)+ 
    'WHERE ([Time] BETWEEN '''+CONVERT(nvarchar(128), @Start, 121) +''' AND '''+ CONVERT(nvarchar(128), @End, 121)+ ''')ORDER BY Time desc'
    EXEC sp_executesql @sql
    
END

它使用sql server 2008处理我的ssrs报告,感谢大家的帮助创建一个存储过程,将表名传递给它,然后构建一个动态sql查询并返回结果。返回,重新开始-使用此模式将面临堆积如山的问题。有人决定为每个对象而不是实体创建一个表。即使您可以随心所欲,您的代码也假定所有这些表都有相同的列集。@SMor在我的数据库中,我现在有20个不同的传感器表名,但它将再次增长,直到100个或更多。某些表具有相同的集合列。我只想让它简单一些,比如10个表由1个报告处理,所以我只需要做10个报告。这就是为什么我需要这种方法。我不想把太多的报告归档。这会让用户感到困惑。@DaleK我会尝试你的建议,因为如何准确地摆脱这种情况是有意义的。我将学习它,因为这是我一生中第一次学习SSR。thanksPretty sure
DECLARE@table varchar(50)@table='[tmp_in_tashilat'+'''+'+@rmz+']'
语法不正确。。。你已经重复了
@table
非常感谢你的重播,在我发表这篇文章之前,我已经尝试过了,但它在我的文章中仍然不能正常工作。