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