【问题标题】:Displaying columns based on the table parameter selected根据选定的表参数显示列
【发布时间】:2015-03-07 22:34:26
【问题描述】:

我正在做一份临时报告。用户将能够从数据库中选择一个表,然后选择他们想要显示的列。这是我拥有的代码和参数。

SELECT 
    name, TABLE_NAME, COLUMN_NAME  
FROM 
    sys.tables
INNER JOIN  
    INFORMATION_SCHEMA.COLUMNS ON TABLE_NAME = name
WHERE 
    TABLE_NAME = @TableName <--multiselect drop down
    AND COLUMN_NAME = @ColumnName <--multiselect drop down

我的问题是如何在报告中创建列,以便根据选择显示相应的列名称。有些表有 4 列,有些有 30 列。我已经看到如何根据选择隐藏列的可见性,但是我必须这样做 278 列,必须有更好的方法。

谢谢。

【问题讨论】:

  • 我建议您要么使用 SQL Server 特定的 sys.* 系统目录视图(如 sys.tablessys.columns),或者然后使用 ANSI/ ISO 标准 INFORMATION_SCHEMA 视图 - 但不要将两者混为一谈。选择一个,坚持下去。
  • 您是否使用存储过程来执行上述查询? @R阿里亚加
  • 目前还没有,我还在想是否需要。

标签: sql-server-2008 tsql reporting-services ssrs-2008-r2


【解决方案1】:

这可以通过两种方式完成。

方法一:传递表名作为参数,列名作为逗号分隔值

DECLARE @TableName NVARCHAR(100) = 'Tablename'
DECLARE @ColumnName NVARCHAR(100) = 'Column1,Column2'

SELECT 
    name, TABLE_NAME, COLUMN_NAME  
FROM 
    sys.tables
INNER JOIN  
    INFORMATION_SCHEMA.COLUMNS ON TABLE_NAME = name
WHERE 
TABLE_NAME = @TableName
AND COLUMN_NAME IN
(
    -- Convert Comma Separated Values to rows
    SELECT PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'Columns' 
    FROM  
    (
         SELECT CAST ('<M>' + REPLACE(@ColumnName, ',', '</M><M>') + '</M>' AS XML) AS Data              
    ) AS A 
    CROSS APPLY Data.nodes ('/M') AS Split(a)
)

方法2:将表名作为参数传递,并在临时表中传递列名

DECLARE @TableName NVARCHAR(100) = 'Tablename'    

SELECT 
    name, TABLE_NAME, COLUMN_NAME  
FROM 
    sys.tables
INNER JOIN  
    INFORMATION_SCHEMA.COLUMNS ON TABLE_NAME = name
WHERE 
TABLE_NAME = @TableName 
AND COLUMN_NAME IN
(
    -- Consider you are inserting the column names to a temporary table before executing this query
    SELECT COLS FROM TEMPTABLE
)

【讨论】:

  • 这是您要找的吗? @R阿里亚加
  • 我更想知道如何映射 tablix 中的列以显示可变数量的列。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多