Прямо сейчас я пытаюсь избавиться от какого-то старого поискового кода в программе на Delphi и хочу перенести поиск на sql-сервер, используемый программой. Для этого я создал этот запрос, который очень похож на запрос, который я использую в другой программе на C #.
Запрос отлично работает с использованием SQL Management Studio или из программы на C #, но в Delphi я получаю сообщение об ошибке «Курсор не возвращен из запроса».
Это запрос
DECLARE @SearchString NVARCHAR(MAX);
SET @SearchString = ':Param1';
IF @SearchString = '' SET @SearchString = '%';
--Table for splitted values
DECLARE @SearchItms TABLE
(
Item NVARCHAR(MAX)
)
--Split Operator
DECLARE @SplitOn NVARCHAR(MAX)
SET @SplitOn = ' '; --Split Keywords on space
--Splitting
While (Charindex(@SplitOn,@SearchString)>0)
Begin
Insert Into @SearchItms (Item)
Select ('%' + Substring(@SearchString,1,Charindex(@SplitOn,@SearchString)-1) + '%')
Set @SearchString = Substring(@SearchString,Charindex(@SplitOn,@SearchString)+1,len(@SearchString))
End
--Add last Item
Insert Into @SearchItms (Item)
Select ('%' + @SearchString + '%')
--Select fitting items
SELECT MyTable.*
FROM MyTable INNER JOIN SecondTable ON (MyTable.Key = SecondTable.Key)
WHERE
NOT EXISTS(
SELECT * FROM @SearchItms WHERE NOT(
(OneField IS NOT NULL AND OneField LIKE Item)
OR (OneDateField IS NOT NULL AND (convert(varchar, OneDateField, 104) LIKE Item) OR (convert(varchar, OneDateField, 114) LIKE Item ) )
OR (AnotherField IS NOT NULL AND AnotherField LIKE Item)
OR (LastField IS NOT NULL AND LastField LIKE Item)
)
)
Одна странная вещь в том, что когда я удаляю
--Add last Item
Insert Into @SearchItms (Item)
Select ('%' + @SearchString + '%')
Я не получаю сообщение об ошибке «Курсор не возвращен из запроса». Но со строкой поиска, где я получаю только 10 результатов в SQL Management Studio, я получаю все элементы в базе данных в Delphi, как будто поиск ничего не делал.
Это происходит также в простой тестовой программе, где у меня есть только Form, TSQLConnection, TSQLQuery, TDataSetProvider и ClientDataSet.
Может кто-нибудь сказать мне, в чем здесь проблема? Поскольку запрос отлично работает в других средах, я думаю, что он должен быть в порядке.
Большое спасибо за любую помощь.