Wie erstelle ich einen Mehrfachauswahl-Parameter mit einer eindeutigen Kennung?
Ich entwickle eine SSRS 2008 R2 RDL-Datei. Jetzt versuche ich, einen Berichtsparameter hinzuzufügen, der eine Mehrfachauswahl sein sollte. Früher habe ich mit Mehrfachauswahl-Parametern gearbeitet, aber vorher waren sie immer CHARACTER-Datentypen. Also in meinem Hauptdatensatz war mein Code:
;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)
(Und in meiner RDL-Datei ermöglicht dieser IncidentType-Berichtsparameter die Mehrfachauswahl)
Aber jetzt ist IncidentType ein UNIQUEIDENTIFIER-Datentyp. Ich habe die SSRS JOIN-Funktion ausprobiert, aber dies gibt mir immer noch den gleichen Fehler in SSRS, wenn ich dies ausführe:
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.
Wie codiere ich dies, indem ich mehrere eindeutige Bezeichner übergebe?
Ich habe die folgende Lösung ausprobiert:
CAST(Split.a.value('.', 'VARCHAR(MAX)') AS UNIQUEIDENTIFIER) AS Names
Aber das gab mir jetzt diesen Fehler:
Msg 8169, Level 16, State 2, Line 62
Conversion failed when converting from a character string to uniqueidentifier.
An der Spitze meines Sprocs habe ich:
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'
Aber die Zeile, die diesen Fehler verursacht, ist:
AND (@IncidentType is NULL OR event_definition_rv.event_definition_id in (SELECT Names FROM #incident_types))
weil ich diese Zeilen ohne Fehler ausführen kann:
select * from #incident_types
select * from #facilities