无法检测到以下存储过程的返回类型

san*_*eep 28 linq-to-sql

在dbml文件中拖放存储过程时,我收到此错误:

未知返回类型
无法检测到以下存储过程的返回类型.在"属性"窗口中设置每个存储过程的返回类型.

我该如何解决这个错误?

She*_*bin 23

只要设计人员无法确定SP的返回类型,就会出现此问题.此处
描述的相同问题和解决方案 如何使用LINQ to SQL获取多个过程结果集

  • 这篇博文可能有一天会消失.你能在答案中加入解决方案吗?(当然,保留原始归属地.)谢谢! (14认同)
  • 博客文章的状态基本上是:将#TempTables转换为@TableVariables。我做到了,这解决了问题。谢谢(你的)信息。 (2认同)

小智 15

我在我的SQL中使用临时表并且遇到了这个错误.我将临时表转换为表变量,这解决了我的问题.

  • 由此: --------- CREATE TABLE #tmptable( [开始时间] DATE, [结束时间] DATE ); 从@tmptable中选择*;---------- 对此: ---------- 声明 @tmptable table ( [Start Time] DATE, [End Time] DATE ); 从@tmptable中选择*;---------- (2认同)

Ond*_*sky 14

这也可能是访问权限的问题.如果存储过程无法访问该表,则会出现相同的错误.我有一个查询从另一个我没有权限的数据库中选择数据(实际上运行Visual Studio连接的帐户没有权限)我收到了同样的错误.添加适当的权利后一切都很顺利.

尝试在VS2010中执行存储过程(通过右键单击Server Explorer并选择"Execute")帮助我解决了这个问题.


Nul*_*ter 14

在参数声明后立即添加这些行

AS
IF 1=0 BEGIN
 SET FMTONLY OFF
END
Run Code Online (Sandbox Code Playgroud)

在此之后,写下BEGIN并开始您的程序工作.


nav*_*een 8

原因:您的存储过程将返回复杂类型.也就是说,多个结果或使用临时表.

解析度

这完全取决于您的存储过程正在执行的操作.有用的链接

  1. http://odetocode.com/code/365.aspx
  2. http://riteshkk2000.blogspot.com/2010/08/error-unknown-return-type-return-types.html

  • 更简洁的答案就是说使用表变量代替存储过程中的任何临时表.那是我的修复. (5认同)

Mik*_*ike 8

我刚刚为我的DBML添加了大约300个存储过程,并且遇到了许多此处和其他地方提到的问题.

以下是根据我个人经历的错误"无法检测到以下存储过程的返回类型"的错误原因和解决方案的摘要.请注意,下面描述的问题可能出现在您遇到错误的SP中,或者直接或间接从该SP调用的任何其他SP.

  • 使用"+"符号将整数与字符串连接起来. 对整数使用CAST(),或者在SQL2012或更高版本中使用CONCAT()语句.
  • 引用其他数据库中的表.显然是一个权限问题.我无法解决这个问题.
  • 对XP_CMDSHELL的任何直接或间接调用. 我无法解决这个问题.
  • 直接或间接调用其他存储过程中的任何语法错误. 修复对SP的调用.
  • 临时表. 用表变量替换临时表.
  • SET QUOTED_IDENTIFIER OFF正在使用中,但正在编辑的表上有一个索引视图.*将set语句更改为SET QUOTED_IDENTIFIER ON.*


dar*_*ixx 7

为了防止其他人遇到这个问题,我自己也经历过.

在我的例子中,我在一个插入语句中引用了一个表,该表在我的模式中不再存在.仔细检查我的代码后发现我插入了一个名为"Account"的表,现在称为"tblAccount".Visual Studio在保存sp时没有出错,但是在尝试将sp添加到dbml文件时遇到了同样的错误.

希望这会帮助其他人.


azc*_*tal 5

我也有这个问题 - 必须注释掉构造多边形的代码:

declare
    @MapBounds geography
    ;

select
    @MapBounds = geography::STGeomFromText('POLYGON((' + 
        cast(@NorthEastLng as varchar) + ' ' + cast(@NorthEastLat as varchar) + ', ' +  
        cast(@SouthWestLng as varchar) + ' ' + cast(@NorthEastLat as varchar) + ', ' +  
        cast(@SouthWestLng as varchar) + ' ' + cast(@SouthWestLat as varchar) + ', ' +  
        cast(@NorthEastLng as varchar) + ' ' + cast(@SouthWestLat as varchar) + ', ' + 
        cast(@NorthEastLng as varchar) + ' ' + cast(@NorthEastLat as varchar) + 
        '))', 4326)
    ;
Run Code Online (Sandbox Code Playgroud)

一旦它被添加到dmbl,我没有注释掉代码,它就像一个冠军!


Dan*_*and 5

我也有问题(VS 2012,SQL Server 2008R2).在我的例子中,它是+运算符和CAST代码中的各种语句的组合.我还没有找到用VisualStudio喜欢的东西替换它们的方法,但我想出了一个解决方法:

解决方法"Dummy SELECT":

  • 创建一个虚拟SELECT语句,其中包含您需要返回的所有字段.例如:
    select 'bla bla' as field1, 123123 as field2, 'asñfs' as field3
Run Code Online (Sandbox Code Playgroud)
  • 注释掉你的SP代码,然后在你的SP中保留虚拟SELECT.
  • 在O/R设计器中添加您的SP并保存(它应该知道没有错误消息)
  • 恢复原始SP(将虚拟SELECT留作注释以备将来使用)