存储过程不返回任何列

时间:2012-12-19 22:14:46

标签: c# sql-server entity-framework stored-procedures

我有以下存储过程:

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

2 个答案:

答案 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)