我正在尝试将此过程拖到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中的过程是否有任何问题?
答案 0 :(得分:1)
这有点相关。我偶然发现了同样的错误,但出于不同的原因。如果您的查询在其结果中使用临时表,则它无法自动分配返回类型。
我将其更改为表变量(性能不是主要问题/并且没有受到影响)
希望这可以帮助有人浏览。
答案 1 :(得分:0)
该行
RETURN 1
是两个案件的罪魁祸首。失去它,Linq应该能够检测你的结果集类型。
Linq to Sql不会直接从存储过程中获取结果。 而是返回一个ISingleResult。你必须枚举 通过结果集获取从存储返回的值 程序
答案 2 :(得分:0)
如果存储过程也有错误,那么可能会发生此错误,因为其中一个表名已更改,因此发生了一次。
另一个因素是尽可能设置主键和表关系
答案 3 :(得分:0)
解决此问题的一种简单方法是(2019年12月)
希望我能帮忙。