2012-09-05 36 views
1

我正在开发一个SSRS 2008 R2 RDL文件。现在,我正在尝试添加一个应该是多选的报表参数。之前我曾使用多选参数,但之前一直使用CHARACTER数据类型。所以在我的主数据集我的代码是:如何用唯一标识符创建多选参数?

;WITH Cte AS 
( 
    SELECT 
     1 as id, 
     CAST('<M>' + REPLACE((select @IncidentType), ',' , '</M><M>') + '</M>' AS XML) AS Names 
) 
SELECT 
    id, 
    Split.a.value('.', 'VARCHAR(MAX)') AS Names 
INTO #incident_types  
FROM Cte 
CROSS APPLY Names.nodes('/M') Split(a) 

(在我RDL文件这个IncidentType报告参数可多选)

但现在IncidentType是UNIQUEIDENTIFIER数据类型。我曾尝试SSRS JOIN功能,但是这仍然是让我在SSRS同样的错误,当我运行此:

An error has occurred during report processing. (rsProcessingAborted) 
Query execution failed for dataset 'Incidents'. (rsErrorExecutingCommand) 
Conversion failed when converting from a character string to uniqueidentifier. 

如何通过传递多个uniqueidentifiers为此做我的代码?

我尝试下面的解决方案,您发布的评论:

CAST(Split.a.value('.', 'VARCHAR(MAX)') AS UNIQUEIDENTIFIER) AS Names 

但是,这给了我现在这个错误:

Msg 8169, Level 16, State 2, Line 62 
Conversion failed when converting from a character string to uniqueidentifier. 

在我的存储过程的顶部,我有:

declare 
    @FacilityID varchar(MAX) = null, 
    @ProgramID uniqueidentifier = null, 
    @ServiceDateStart smalldatetime = null, 
    @ServiceDateEnd smalldatetime = null, 
    @IncidentType varchar(MAX) = null 

SET @IncidentType = '864EA130-F36B-4958-B51F-EE9DBD35D804,671A8EB3-8298-40DB-BD66-93309904E463,ACA1EB55-3D66-467B-8388-CC42FCFB00F3 
SET @FacilityID = '83B465B8-28DD-4F37-9F2D-A4D5E38EE7FB,3EC657F7-655F-43FB-8424-2A8914E7C725,B2064474-5C9B-4884-B1D7-4FCE1C804DF7' 

但是,导致此错误的行是:

AND (@IncidentType is NULL OR event_definition_rv.event_definition_id in (SELECT Names FROM #incident_types)) 

因为我可以无差错运行这些行:

select * from #incident_types 
select * from #facilities 

回答

1

尝试铸造未分离值作为唯一标识符:

;WITH Cte AS 
( 
    SELECT 
     1 as id, 
     CAST('<M>' + REPLACE((select @IncidentType), ',' , '</M><M>') + '</M>' AS XML) AS Names 
) 
SELECT 
    id, 
    CAST(Split.a.value('.', 'VARCHAR(MAX)') AS UNIQUEIDENTIFIER) AS Names 
INTO #incident_types 
FROM Cte 
CROSS APPLY Names.nodes('/M') Split(a) 
+0

保罗,美国可以再看一看好吗? – salvationishere

+0

你能展示你的完整代码吗? '运行EXEC tempdb..sp_help'#incident_types''表明#incident_types表的类型是GUID。而且我没有使用'WHERE x in(SELECT Names from #incident_types)'子句,所以我认为问题可能在其他地方。 – PaulStock

+0

谢谢,我一定误入了IncidentType的原因,现在我的sproc正在处理你的逻辑!谢谢! – salvationishere