2012-12-19 87 views
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 [email protected] 
) 
ELSE 
SELECT TOP (@limit) ID, Title from Media where CONTAINS([Title], @searchString) 

END 

在實體框架,當我嘗試它在功能導入它說

選定存儲映射的複雜類型程序返回沒有列

我已閱讀關於此在互聯網上,我發現我需要設置SET FMTONLY OFF,但正如你所看到的那樣沒有奏效。

任何想法?

編輯

我已經改變了SELECT*並返回一個空的結果。我認爲這是關係到上述

+2

位A bodge的,但如果你只是臨時更改定義什麼'SELECT ID,從Media'標題所以它是一個簡單的直線前進,沒有條件邏輯PROC然後進行實體框架映射,然後把你原來的代碼早在兩條路徑看起來像他們將返回該形狀的結果集。 –

+0

我想這一點,但它不工作 – Kosmog

+1

你擺脫'SET FMTONLY'聲明?這是什麼特定於該存儲過程還是你得到這個所有存儲過程? –

回答

3

大家誰都有同樣的問題,這是我做了什麼。

首先我修改存儲過程以一個簡單的一個是這樣的:

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

我進口它在Entity Framework,創建了複雜類型和映射屬性

然後,我改變回來,並更新所述模型現在它可以工作。 我認爲Entity Framework有一些複雜的存儲過程的問題。從我讀的它不能得到動態存儲過程或使用temp tables的存儲過程的結果。

PS:當我用Ajax調用它,我把它用data.column1 and data.column2。如果我使用data.value' it returns未定義`。

這是有點奇怪。

編輯:這就像馬丁說,但我不知道它爲什麼沒有奏效!謝謝btw!

1

我猜你缺少你的prefix_term單引號說明問題。 所以這個:

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

應該是:

set @searchString = CHAR(39) + '"' + @query +'*"' + CHAR(39) 
+0

我正在使用全文搜索,它不起作用 – Kosmog