Sql 如何扩展代码以显示SSRS报告中所选列的下拉列表
我是sql新手,我正在尝试创建SSR。 我在网上找到了这段代码来创建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
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…
- 如果愿意,您可以在末尾添加
,以查看生成的SQLPRINT@SQL
SET @SQL = 'SELECT DISTINCT ' + QUOTENAME(@ColumnName) + ' FROM ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName) + ' ORDER BY ' + QUOTENAME(@ColumnName)
EXEC (@SQL)