2012-03-21 25 views
4

我有一個問題。我在Asp.Net上的一個站點上工作,它使用了一些ORM。我需要使用幾個FullTextSearch函數,比如Contains。但是,當我嘗試用ORM生成它,它會產生這樣的SQL代碼將SQL CONTAINS換成表達式?

SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[Name] AS [Name] 
    FROM [dbo].[SomeTable] AS [Extent1] 
    WHERE (Contains([Extent1].[Name], N'qq')) = 1 

SQL無法解析,因爲包含不返回位值。不幸的是,我無法修改SQL查詢生成過程,但我可以修改其中的語句。

我的問題是 - 是否有可能將CONTAINS函數的調用換成別的東西?我試圖創建另一個函數,將與包含選擇,但它需要特定的表\列對象,我不想爲每個表做一個功能..

編輯

我可以在ORM中修改該函數的結果類型。在前面的示例結果類型是位。我可以將其更改爲int,nvarchar等。但據我所知,SQL中沒有布爾類型,我無法指定它。

+8

難道你不能把它放在存儲過程中,並告訴你的ORM調用存儲過程嗎?爲什麼每個與ORM相關的問題看起來像是ORM在過去的十年中採用了數據庫技術? – 2012-03-21 23:11:52

+0

它可以在'IIF'或'CASE'中使用嗎? – 2012-03-21 23:14:55

+1

是的,我可以,但是通過這種方式,我應該將含有包含的每個SQL都放入新的存儲過程中。如果可能的話,我想做出更通用的方式,它可以在沒有特定表格的情況下處理它。 – 2012-03-21 23:16:03

回答

2

難道你不能把它放在存儲過程中,並告訴你的ORM調用存儲過程嗎?那麼你不必擔心你的ORM只理解有效的T-SQL的一個子集。

我不知道我相信需要新的存儲過程的論點是一個阻礙。如果你必須在你的ORM代碼中寫一個新的CONTAINS表達式,那麼它將這個表達式包裝在不同窗口中的CREATE PROCEDURE語句中有多大的不同?如果你想純粹用ORM來做這件事,那麼你將不得不向供應商施加壓力,以加快步伐,並開始更全面地覆蓋他們應該完全支持的語言。

+0

謝謝。其實我通過一些存儲過程做了。這種方式不是很清楚,但它工作正常。 – 2012-05-12 11:32:18