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 

同樣的結果使用臨時表時:

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

還是沒有用表變量列:

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

當執行該過程直接在SQL Server中,我正在獲得所需的值。

我錯過了什麼?我認爲SET FMTONLY OFF會做的伎倆,但在這種情況下,沒有任何變化,我的程序仍然「沒有列返回」。


編輯1

我試着在他的評論暗示什麼@NEER。我將SELECT更改爲SELECT 1 AS ImportId。但我仍然收到同樣的信息。

+0

變化'SELECT CAST(SCOPE_IDENTITY()AS BIGINT)AS ImportId'爲'SELECT 1 AS ImportId'然後更新您的實體。 – NEER

+0

@NEER我試過了,但EF仍然不能識別任何列。 –

+0

你也可以試試這個嗎? '從OneOfYourTable'選擇1作爲Foo' – NEER

回答

0

我發現了這個問題。我在存儲過程的內部塊的頂部添加了SET FMTONLY OFF,因爲其中一個單獨無效。他們倆都沒有在一起...所以我刪除了塊內的一個,並再次嘗試它出乎意料地按預期工作。

我的存儲過程,現在看起來是這樣的:

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