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

dy1byipe  于 2023-03-15  发布在  其他
关注(0)|答案(5)|浏览(164)

我试图将此过程拖到VS 2012中的dbml中,但我得到了无法检测到返回类型的消息。
我试过这些:LINQ to SQL - Stored Procedure Return Type ErrorThe return types for the following stored procedures could not be detected
我尝试将该过程重写为CTE,也重写为联合,以删除OR,但它给了我相同的消息。
方法的设计器属性中唯一的返回类型是int 32。
下面是我的步骤:

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)')
它允许我添加它--自动生成的返回类型
C.如果我只使用
WHERE FREETEXT(a.FileData, @SearchWord)
它抛出错误,因此不喜欢FREETEXT
如果我注解掉where子句并添加它,让它生成返回类型,然后更改数据库中的过程,会有什么问题吗?

8cdiaqws

8cdiaqws1#

这有点关系。我今天偶然发现了同样的错误,但原因不同。如果你的查询在结果中使用了临时表,那么它就不能自动分配返回类型。
我将其更改为表变量(性能不是主要问题/并且未受影响)
希望这对浏览的人有帮助。

nle07wnf

nle07wnf2#

这条线

RETURN 1

在这两种情况下都是罪魁祸首。失去它,Linq应该能够检测到结果集的类型。
Linq to Sql不会直接从存储过程获取结果。而是返回ISingleResult。您必须枚举整个结果集以获取从存储过程返回的值

ekqde3dh

ekqde3dh3#

如果存储过程也有任何错误,那么这个错误可能会发生,对我来说,它发生了一次,因为其中一个表名被更改。
另一个因素是设置主键和表关系(如果可能

pnwntuvh

pnwntuvh4#

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

  • 只需要在#tmp =〉##tmp之前加上两个#
  • 注解掉删除表#tmp =〉--删除表#tmp
  • 执行存储过程
  • 再次拖动存储过程,就这样,它将生成返回类型
  • 最后,把你的商店回到第一种情况,然后保存.

希望我能帮忙。

twh00eeo

twh00eeo5#

我尝试将此过程拖到VS 2019中的dbml,但收到此错误-存储过程返回类型错误无法检测以下存储过程的返回类型。
我试着重写存储过程,但是没有什么进展。后来我发现我创建存储过程的表将添加一些信息,如abc.tblname,其中abc是用户名的名称。如下面的示例所示。

**问题:创建表[abc].[tb_移动的](..

解决方案:我刚刚将其转换为dbo。示例- CREATE TABLE [dbo].[tb_移动的](..**
现在我所有的存储过程和我所面临的问题都完全解决了。
希望这对你有用。

相关问题