报表生成器参数下拉列表以选择列名称

时间:2014-07-17 13:34:51

标签: sql sql-server reporting-services

我有一个带有可用值的参数作为列名,我在sql查询中使用该参数

 WHERE ((@ColumnName) BETWEEN (@StartDate) AND (@EndDate)) 
AND (schema.table.column_name LIKE (@Number))

当我尝试运行报告时,我得到一个无法从字符转换日期/时间

enter image description here

如果我删除@ColumnName参数,报表运行正常但我希望能够选择一列来搜索日期。

1 个答案:

答案 0 :(得分:1)

如果你想动态传递列名,你需要使用一个存储过程来使用像这样的动态sql ....

CREATE PROCEDURE Get_Data
  @ColumnName1  SYSNAME,
  @ColumnName2  SYSNAME,
  @StartDate    DATETIME,
  @EndDate      DATETIME,
  @Number       VARCHAR(100)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @SQL NVARCHAR(MAX);

SET @SQL = N'SELECT * FROM TableName'
         + N'WHERE ' + QUOTENAME(@ColumnName1) + N' BETWEEN @StartDate AND @EndDate '
         + N' AND ' + QUOTENAME(@ColumnName2) + N' LIKE ''@Number'' '

 EXECUTE sp_executesql @SQL 
                      ,N'@StartDate DATETIME, @EndDate DATETIME, @Number VARCHAR(100)'
                      ,@StartDate
                      ,@EndDate
                      ,@Number

END