【问题标题】:The selected stored procedure or function returns no columns选定的存储过程或函数不返回任何列
【发布时间】:2016-11-28 14:26:04
【问题描述】:

我在互联网上搜索并找到了类似的帖子。但是,没有任何解决方案对我有用。

我的一个存储过程遇到问题。在 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。但我仍然收到相同的消息。

【问题讨论】:

  • SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS ImportId 更改为 SELECT 1 AS ImportId 然后更新您的实体。
  • @NEER 我试过了,但 EF 仍然无法识别任何列。
  • 你也可以试试这个吗? SELECT 1 AS Foo FROM OneOfYourTable
  • @NEER 这不会改变任何事情。

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


【解决方案1】:

我找到了问题所在。我在我的存储过程的内部块顶部添加了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

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 2018-07-11
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多