1

私のプロジェクトでは、EF は以下に示すストアド プロシージャを呼び出します。1 またはスコープ ID を返します。

EF 関数のインポートでは、ストアド プロシージャが 10 進数の戻り値の型で一覧表示されます。

ストアド プロシージャがスコープ ID を返すと、すべて問題ありません。

しかし、sp の条件が満たされる場合、ef は次のようにエラーをスローします。

ストア データ プロバイダーによって返されたデータ リーダーには、要求されたクエリに対して十分な列がありません。

助けてください..

これは私のストアドプロシージャです:

@VendorId int,
    @ueeareaCode varchar(3),
    @TuPrfxNo varchar(3),
    @jeeSfxNo varchar(4),
    @Tjode varchar(3),
    @uxNo varchar(3),
    @TyufxNo varchar(4),
    @Iyuy bit


AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from

    SET NOCOUNT ON;

     IF EXISTS (Select dfen_id
                    from dbo.efe_phfedwn_eflwn
                    where
                    [yu] = @Tyuode and
                    [uy] = @TuyxNo and
                    [yuno] = @Tuo)
                    return 1
    ELSE
        Begin
            INSERT INTO dbo.yu 
                         ....................                       
            Select Scope_Identity()
    End
END
4

1 に答える 1

1

このエラーは、EF が結果セットを予期していて、使用しRETURNても結果セットが得られないことを示しています。あなたのエラーは、ストアド プロシージャが整数を返していることを意味しますが、EF は 10 進数を期待しているためCAST、選択した値を 10 進数にします。

そのため、 SQL を変更して、 のSELECT代わりにRETURN( を使用することを忘れずにCAST)のようにします。

 IF EXISTS (Select cntct_ctr_phn_ln_id
                from dbo.cntct_ctr_phn_ln
                where
                [toll_free_phn_area_cd] = @TollfreeareaCode and
                [toll_free_phn_prfx_no] = @TollfreePrfxNo and
                [toll_free_phn_sfx_no] = @TollfreeSfxNo)
                SELECT CAST(1 AS decimal)

次に、10 進数へCASTの結果も:SCOPE_IDENTITY()

SELECT CAST(SCOPE_IDENTITY() AS decimal)
于 2013-05-30T10:10:42.640 に答える