我有以下存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SearchMediaTitles]
@query varchar(50),
@limit int = 6,
@userId int
AS
SET FMTONLY OFF
BEGIN
declare @searchString varchar(52)
set @searchString = '"' + @query +'*"'
IF @userId!=NULL
SELECT TOP (@limit) ID, Title from Media where CONTAINS([Title], @searchString)
AND ID IN
(
SELECT FavoriteMedia_ID
FROM dbo.UserMedia
WHERE UserMedia_Media_ID=@userId
)
ELSE
SELECT TOP (@limit) ID, Title from Media where CONTAINS([Title], @searchString)
END
在实体框架中,当我尝试在复杂类型的函数导入时将其映射为
所选存储过程不返回任何列
我在网上看过这个,我发现我需要设置SET FMTONLY OFF
,但是你可以看到它不起作用。
有什么想法吗?
修改:
我已将SELECT
更改为*
并返回空结果。我认为这与上述问题有关
答案 0 :(得分:3)
对于遇到同样问题的每个人,这就是我所做的。
首先,我将存储过程修改为一个简单的存储过程:
SELECT [column1],[column2] FROM [table]
我在Entity Framework
中导入了它,创建了复杂类型和映射属性
然后我更改了它并更新了模型,现在它可以工作了。
我认为Entity Framework
在复杂的存储过程中存在一些问题。从我读到的内容来看,它无法获得动态存储过程或使用temp tables
的存储过程的结果。
PS:当我用Ajax调用它时,我使用data.column1 and data.column2
来调用它。如果我使用data.value' it returns
undefined`。
有点奇怪。
编辑:就像马丁说的那样,但我不知道为什么它首先没有起作用!谢谢顺便说一句!
答案 1 :(得分:1)
我猜你错过了prefix_term上的单引号。 所以这个:
set @searchString = '"' + @query +'*"'
应该是:
set @searchString = CHAR(39) + '"' + @query +'*"' + CHAR(39)