Обернуть SQL содержит в качестве выражения? - PullRequest
4 голосов
/ 22 марта 2012

У меня есть вопрос. Я работаю над одним сайтом на Asp.Net, который использует некоторые ORM. Мне нужно использовать несколько функций FullTextSearch, таких как Contains. Но когда я пытаюсь сгенерировать его с помощью ORM, он генерирует такой код SQL

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

SQL не может его проанализировать, поскольку Contains не возвращает битовое значение. И, к сожалению, я не могу изменить процесс генерации SQL-запросов, но я могу изменить в нем операторы.

У меня вопрос - можно ли обернуть вызов функции CONTAINS чем-то другим? Я попытался создать другую функцию, которая будет SELECT с содержимым, но для этого требуются определенные объекты таблицы \ столбца, и я не хочу делать одну функцию для каждой таблицы.

EDIT

Я могу изменить тип результата для этой функции в ORM. В предыдущем примере тип результата - Бит. Я могу изменить его на int, nvarchar и т. Д. Но, как я понял, в SQL нет логического типа, и я не могу его указать.

1 Ответ

2 голосов
/ 02 мая 2012

Не можете ли вы поместить это в хранимую процедуру и попросить ORM вызвать хранимую процедуру? Тогда вам не нужно беспокоиться о том, что ваш ORM понимает только подмножество действительного T-SQL.

Я не знаю, что я верю в аргумент, что требование новых хранимых процедур является блокировщиком. Если вам нужно написать новое выражение CONTAINS в вашем коде ORM, насколько отличается это, чтобы обернуть это выражение в оператор CREATE PROCEDURE в другом окне? Если вы хотите сделать это исключительно в ORM, то вам придется оказать давление на поставщика, чтобы он набрал скорость и начал более полно освещать язык, который они должны полностью поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...