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

Entity Frameworkで、関数のインポート時に複合型にマップしようとすると、

選択したストアドプロシージャは列を返しません

これについてインターネットで読んだところ、設定する必要があること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.column2data.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 に答える