SSRS 2008 查询:Table 所选参数的名称
SSRS 2008 query : Table name from parameter selected
我的数据库包含来自我的传感器名称的 table。首先,我尝试通过底部的查询获取我的 table 名称,以获取特定的 table 传感器名称
SELECT name AS TableName FROM sys.tables AS tbl
WHERE (name LIKE 'ATRH.%')
然后SSRS上的结果是这样的:
但是我如何在查询数据表中将该参数用作 table 名称?
我已经在底部尝试了一个简单的查询,但我收到一条错误消息,SSRS 无法识别@PARAMETERTABLENAME
SELECT TOP (1000) [SensorID], [Time] ,[Value] FROM @PARAMETERTABLENAME where (Time BETWEEN @Start AND @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)
您可以将此模板用于您自己的查询
我认为它首先使用 full 你必须在数据集
的 Query=>Query 部分写这个
EXEC('SELECT TOP (1000) [SensorID], [Time] ,[Value] FROM '+@PARAMETERTABLENAME+' where
(Time BETWEEN '''+ @Start +''' AND '''+ @End+''')'
然后设置数据集 Parameters 部分中使用的每个参数,并设置为您在报告的 Parameter 部分中声明的参数
我在这周做了很多次之后得到了答案,我尝试使用 select 数据库名称作为此查询的参数:
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')
然后我在这个查询中使用 dbname 参数尝试 select 表名 :
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 个日期范围内的数据
在sql服务器中我用这个查询创建了一个存储过程
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
它可以在我的 ssrs 报告中使用 sql 服务器 2008,感谢大家的帮助
我的数据库包含来自我的传感器名称的 table。首先,我尝试通过底部的查询获取我的 table 名称,以获取特定的 table 传感器名称
SELECT name AS TableName FROM sys.tables AS tbl WHERE (name LIKE 'ATRH.%')
然后SSRS上的结果是这样的:
但是我如何在查询数据表中将该参数用作 table 名称?
我已经在底部尝试了一个简单的查询,但我收到一条错误消息,SSRS 无法识别@PARAMETERTABLENAME
SELECT TOP (1000) [SensorID], [Time] ,[Value] FROM @PARAMETERTABLENAME where (Time BETWEEN @Start AND @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)
您可以将此模板用于您自己的查询
我认为它首先使用 full 你必须在数据集
的 Query=>Query 部分写这个EXEC('SELECT TOP (1000) [SensorID], [Time] ,[Value] FROM '+@PARAMETERTABLENAME+' where
(Time BETWEEN '''+ @Start +''' AND '''+ @End+''')'
然后设置数据集 Parameters 部分中使用的每个参数,并设置为您在报告的 Parameter 部分中声明的参数
我在这周做了很多次之后得到了答案,我尝试使用 select 数据库名称作为此查询的参数:
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')
然后我在这个查询中使用 dbname 参数尝试 select 表名 :
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 个日期范围内的数据
在sql服务器中我用这个查询创建了一个存储过程
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
它可以在我的 ssrs 报告中使用 sql 服务器 2008,感谢大家的帮助