【发布时间】: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