我试图将此过程拖到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子句并添加它,让它生成返回类型,然后更改数据库中的过程,会有什么问题吗?
5条答案
按热度按时间8cdiaqws1#
这有点关系。我今天偶然发现了同样的错误,但原因不同。如果你的查询在结果中使用了临时表,那么它就不能自动分配返回类型。
我将其更改为表变量(性能不是主要问题/并且未受影响)
希望这对浏览的人有帮助。
nle07wnf2#
这条线
在这两种情况下都是罪魁祸首。失去它,Linq应该能够检测到结果集的类型。
Linq to Sql不会直接从存储过程获取结果。而是返回ISingleResult。您必须枚举整个结果集以获取从存储过程返回的值
ekqde3dh3#
如果存储过程也有任何错误,那么这个错误可能会发生,对我来说,它发生了一次,因为其中一个表名被更改。
另一个因素是设置主键和表关系(如果可能
pnwntuvh4#
解决此问题的简单方法是(2019年12月)
希望我能帮忙。
twh00eeo5#
我尝试将此过程拖到VS 2019中的dbml,但收到此错误-存储过程返回类型错误无法检测以下存储过程的返回类型。
我试着重写存储过程,但是没有什么进展。后来我发现我创建存储过程的表将添加一些信息,如abc.tblname,其中abc是用户名的名称。如下面的示例所示。
**问题:创建表[abc].[tb_移动的](..
解决方案:我刚刚将其转换为dbo。示例- CREATE TABLE [dbo].[tb_移动的](..**
现在我所有的存储过程和我所面临的问题都完全解决了。
希望这对你有用。