現在,我想擺脫一些delphi程序中的舊搜索代碼,並且我想將搜索推到程序正在使用的sql-server上。爲此,我創建了這個查詢,這與我在不同的C#程序中使用的查詢非常相似。TSQLQuery - 遊標不是從查詢返回
該查詢工作得很好,使用SQL管理工作室或從C#程序,但與德爾福我得到一個「遊標不查詢返回」錯誤。
這是查詢
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 + '%')
我沒有得到錯誤的「不是從查詢返回的光標」。但是使用搜索字符串,在SQL Management Studio中只有10個結果,我在Delphi中獲取數據庫中的所有項目,就像搜索沒有做任何事情一樣。
這種情況也出現在一個簡單的測試程序中,我只有一個Form,一個TSQLConnection,TSQLQuery,TDataSetProvider和一個ClientDataSet。
有人可以告訴我最新的問題嗎?由於查詢在其他環境中正常工作,我認爲它應該是可以的。
非常感謝您的幫助。
是的,開始相同的答案,但你寫得更快:P – Rodrigo
我有同樣的問題,簡單的「DELETE FROM WHERE id =:id」 –