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

时间:2014-01-02 19:59:58

标签: c# sql sql-server linq linq-to-sql

我正在尝试将此过程拖到VS 2012中的dbml中,并且我收到无法检测到返回类型的消息。

我试过这些: LINQ to SQL - Stored Procedure Return Type Error The return types for the following stored procedures could not be detected

我尝试将程序重新编写为CTE,并将其作为联合来删除OR,但它给了我相同的信息。

该方法的设计器属性中唯一的返回类型是int32。

这是我的程序:

ALTER PROCEDURE [dbo].[GetStringFromFiles]
    @SearchWord NVARCHAR(100) = null
AS
BEGIN

    SET NOCOUNT ON
    SET @SearchWord = UPPER(@SearchWord);

Select    
       a.FileId     <---Guid
     , a.FileData   <---Binary
     , a.BaselineId <---Guid
     , a.FileName   <---NVARCHAR
     , a.FileExtension  <---NVARCHAR
     , b.FileByItemId   <----Guid
     , b.ItemId   <---Guid
From FileTable a

    Inner Join

     FileByItem b on a.FileId = b.FileId 

     WHERE CONTAINS(a.FileData,'FORMSOF(INFLECTIONAL, @SearchWord)') or FREETEXT(a.FileData, @SearchWord)
    RETURN 1
END

更新

一个。如果我注释掉整个Where子句 - Auto-Generated-ReturnType

,我可以添加它

B中。如果我拿走或只是使用:

WHERE CONTAINS(a.FileData,'FORMSOF(INFLECTIONAL, @SearchWord)')

它让我添加它 - Auto-Generated-ReturnType

℃。如果我只是使用

WHERE FREETEXT(a.FileData, @SearchWord)

它会抛出错误,因此它不喜欢FREETEXT

如果我将where子句注释掉并添加它并让它生成返回类型然后更改db中的过程是否有任何问题?

4 个答案:

答案 0 :(得分:1)

这有点相关。我偶然发现了同样的错误,但出于不同的原因。如果您的查询在其结果中使用临时表,则它无法自动分配返回类型。

我将其更改为表变量(性能不是主要问题/并且没有受到影响)

希望这可以帮助有人浏览。

答案 1 :(得分:0)

该行

RETURN 1

是两个案件的罪魁祸首。失去它,Linq应该能够检测你的结果集类型。

  

Linq to Sql不会直接从存储过程中获取结果。   而是返回一个ISingleResult。你必须枚举   通过结果集获取从存储返回的值   程序

答案 2 :(得分:0)

如果存储过程也有错误,那么可能会发生此错误,因为其中一个表名已更改,因此发生了一次。

另一个因素是尽可能设置主键和表关系

答案 3 :(得分:0)

解决此问题的一种简单方法是(2019年12月)

  • 只需在#tmp => ## tmp之前加双#
  • 注释掉DROP TABLE #tmp => --DROP TABLE #tmp
  • 执行存储过程
  • 再次拖动存储过程,仅此而已,它将生成返回类型
  • 最后,将您的商店恢复为第一种情况,然后保存。

希望我能帮忙。