0

私はインターネットで検索し、それについての同様の記事を発見しました。しかし、私にとって解決策はありませんでした。選択されたストアドプロシージャまたは関数は列を返しません

私のストアドプロシージャに問題があります。 Visual Studioでプロジェクトに追加すると、次のメッセージが表示されます。

選択されたストアドプロシージャまたは関数は列を返しません。

私は手順にSET FMTONLY OFFを追加することで問題を解決できます(here)。これで何も変わりません。それでもEFに従って列は返されません。

私のストアドプロシージャは、次のようになります。

ALTER PROCEDURE [dbo].[spImportData] 
    @someParameter 
AS 
BEGIN 
    SET NOCOUNT ON; 

    -- Some insertion 
    INSERT INTO dbo.SomeTable ([SomeField]) 
    SELECT @someParameter 

    SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS ImportId 
END 

同じ結果一時テーブル使用した場合:実行するとき

DECLARE @importId BIGINT = SELECT CAST(SCOPE_IDENTITY() AS BIGINT) 
SELECT @importId 

:テーブル変数と

CREATE TABLE #temp (ImportId BIGINT) 
INSERT INTO #temp (ImportId) 
SELECT CAST(SCOPE_IDENTITY() AS BIGINT) 
SELECT ImportId FROM #temp 
DROP TABLE #temp 

まだ列をSQL Serverで直接プロシージャ、私は希望の値を得ています。

私には何が欠けていますか?私はSET FMTONLY OFFがトリックを行うだろうと思ったが、この場合は何も変わらず、私の手続きはまだ "列を返さない"。


編集1

私は彼のコメントで示唆するもの@NEERてみました。 SELECTSELECT 1 AS ImportIdに変更しました。しかし、私はまだ同じメッセージを受けています。

+0

変更 'SELECT CAST(BIGINT AS SCOPE_IDENTITYを())ImportId' AS ImportId'は、あなたのエンティティを更新として' 1を選択します。 – NEER

+0

@NEER私はそれを試しましたが、EFはまだ列を認識しません。 –

+0

これも試してもらえますか? 'SELECT 1 AS Foo From OneOfYourTable' – NEER

答えて

0

問題が見つかりました。私はSET FMTONLY OFFを、ストアドプロシージャの内側のブロックの上に宣言の上に追加しました。その1つだけが機能しなかったからです。どちらも一緒にはいませんでした...だから、ブロック内のものを取り除き、驚いたことに期待どおりのことをやってみました。

は私のストアドプロシージャは、次のようになります。

SET FMTONLY OFF 
GO 
ALTER PROCEDURE [dbo].[spImportData] 
    @someParameter 
AS 
BEGIN 
    -- SET FMTONLY OFF; -> I removed this line 

    SET NOCOUNT ON; 

    -- Some insertion 
    INSERT INTO dbo.SomeTable ([SomeField]) 
    SELECT @someParameter 

    SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS ImportId 
END 
関連する問題