0

我有以下存储过程:

 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*并返回一个空结果。我认为这与上述问题有关

4

2 回答 2

3

对于每个有同样问题的人,这就是我所做的。

首先,我将存储过程修改为一个简单的过程,如下所示:

  SELECT  [column1],[column2] FROM [table]

我将其导入Entity Framework,创建了复杂类型和映射属性

然后我把它改回来并更新了模型,现在它可以工作了。我认为Entity Framework复杂的存储过程存在一些问题。根据我的阅读,它无法获得动态存储过程或使用temp tables.

PS:当我使用 Ajax 调用它时,我使用 data.column1 and data.column2. 如果我使用data.value' it returnsundefined` 。

这有点奇怪。

编辑:就像马丁说的,但我不知道为什么它一开始就不起作用!谢谢你顺便说一句!

于 2012-12-20T09:06:56.227 回答
1

我猜你在你的 prefix_term 上缺少单引号。所以这:

set @searchString = '"' + @query +'*"'

应该:

set @searchString = CHAR(39) + '"' + @query +'*"' + CHAR(39)
于 2012-12-19T23:59:39.223 回答