2012-09-05 37 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