2

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.

私のsprocの一番上に私は持っています:

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
4

2 に答える 2

1

分割されていない値を uniqueidentifier としてキャストしてみてください。

    ;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)
于 2012-09-05T18:04:17.083 に答える