Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何扩展代码以显示SSRS报告中所选列的下拉列表_Sql_Reporting Services - Fatal编程技术网

Sql 如何扩展代码以显示SSRS报告中所选列的下拉列表

Sql 如何扩展代码以显示SSRS报告中所选列的下拉列表,sql,reporting-services,Sql,Reporting Services,我是sql新手,我正在尝试创建SSR。 我在网上找到了这段代码来创建SSRS报告,它对我很有用。但是,我需要调整此代码以从选定列中获取值 USE [project] GO /****** Object: StoredProcedure [dbo].[Report] Script Date: 26-1-2020 01:19:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[R

我是sql新手,我正在尝试创建SSR。 我在网上找到了这段代码来创建SSRS报告,它对我很有用。但是,我需要调整此代码以从选定列中获取值

USE [project]
GO
/****** Object:  StoredProcedure [dbo].[Report]    Script Date: 26-1-2020 01:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[Report]
@SchemaName VARCHAR(128)='sys',
@TableName VARCHAR(128)='columns',
@ColumnList VARCHAR(MAX)='object_id,column_id,name,max_length,system_type_id'

AS 
BEGIN 


DECLARE @ColumnNames VARCHAR(MAX) 
DECLARE @ColumnNamesVAR VARCHAR(MAX)

--drop ##Temp_Data Table
IF OBJECT_ID('tempdb..##Temp_Data') IS NOT NULL
    DROP TABLE ##Temp_Data


    --drop ##Temp_Data_Final Table
IF OBJECT_ID('tempdb..##Temp_Data_Final') IS NOT NULL
    DROP TABLE ##Temp_Data_Final

--drop #Temp_Columns Table
IF OBJECT_ID('tempdb..#Temp_Columns') IS NOT NULL
    DROP TABLE #Temp_Columns

Create table #ColumnList (Data NVARCHAR(MAX))
insert into #ColumnList values (@ColumnList)

--convert all column list to VARCHAR(1000) for unpivot

;with Cte_ColumnList as (
SELECT 
'['+LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)')))+']'  AS ColumnList
FROM
(
SELECT CAST('<XMLRoot><RowData>' + REPLACE(Data,',','</RowData><RowData>') 
+ '</RowData></XMLRoot>' AS XML) AS x
FROM   #ColumnList
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n))
,CTE_ColumnListVarchar  as
(Select 'CAST('+ColumnList+' as VARCHAR(1000)) AS '+ColumnList AS ColumnListVAR,ColumnList from Cte_ColumnList)

SELECT @ColumnNamesVAR = COALESCE(@ColumnNamesVAR + ', ', '') + ColumnListVAR,
@ColumnNames = COALESCE(@ColumnNames + ', ', '') + ColumnList 
FROM  CTE_ColumnListVarchar

--Insert data into ##Temp_Data Table
DECLARE @SQL NVARCHAR(MAX)
DECLARE @TempTbleSQL NVARCHAR(MAX)
SET @TempTbleSQL='Select ROW_NUMBER() 
        OVER (order by (Select 1)) AS R,'+@ColumnNames +' into ##Temp_Data from ['+@SchemaName+'].['+@TableName+']'

--Print @TempTbleSQL
EXEC(@TempTbleSQL)

SET @SQL='

select 
R,columnname,value into ##Temp_Data_Final from 
(select R,'+@ColumnNamesVAR+' from ##Temp_Data )u
unpivot
(value for columnname  in ('+@ColumnNames+'))v'
--Print @SQL
EXEC(@SQL)

Select * From ##Temp_Data_Final

END

要获取列中的值列表,需要构建一个SQL语句,然后执行它

因为你有你的参数,你可以这样做

SET @SQL = 'SELECT DISTINCT ' + QUOTENAME(@ColumnName) + ' FROM ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName) + ' ORDER BY ' + QUOTENAME(@ColumnName)
EXEC (@SQL)
注释

  • 这将提供一个不同的值列表,并使用ORDERBY子句对它们进行排序,只需编辑
    SET@SQL=
    行即可调整执行的查询
  • 我使用QUOTENAME()将方括号括在架构、表和列名周围,例如,
    SELECT DISTINCT[myColumnName]FROM…
  • 如果愿意,您可以在末尾添加
    PRINT@SQL
    ,以查看生成的SQL

可能是关于我的英语不好,但问题是:我如何扩展代码以显示所选列中的下拉列表。请回答您的问题以澄清您的具体问题,或添加其他详细信息以突出显示您需要的内容。如果您能解释您想要实现的目标,这会有所帮助。勾勒出报告布局,包括您希望在每个参数中看到的内容、一些适用的示例数据以及最终的预期输出。和每个参数的数据集。在报告设计中,我使用了MARTIX,所以:(R代表行,value代表数据,columnname代表列)谢谢。但我认为我们需要在SP_报告中包含这一声明。因为正如您在SP中看到的,值被插入临时表中,然后从中选择。您确实需要显示最终输出的外观,您询问了如何获取值列表,这就是我所解释的。编辑您的问题以显示预期的最终输出,我将在今晚查看谢谢您的耐心@Alan,我添加了截图。假设我从表中选择了这些列。现在我需要从这些列中获取一个值列表,以便根据它们进行筛选。所以我不需要所有的行。我只需要特定合同编号的行(例如)
SET @SQL = 'SELECT DISTINCT ' + QUOTENAME(@ColumnName) + ' FROM ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName) + ' ORDER BY ' + QUOTENAME(@ColumnName)
EXEC (@SQL)