选定的存储过程或函数不返回任何列

时间:2016-07-25 09:45:53

标签: tsql stored-procedures entity-framework-6 sql-server-2014

我在互联网上搜索过,发现了类似的帖子。但是,没有解决方案适合我。

我遇到了一个存储过程问题。在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。但我仍然得到同样的信息。

1 个答案:

答案 0 :(得分: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