Мне только удалось включить полнотекстовый поиск, чтобы облегчить поиск продуктов в моей системе. Тем не менее, я использую sp, который был создан кем-то другим, и он не возвращает никаких результатов для «Duty Call». На самом деле я ищу «Call of Duty», продукт в системе. Если я набираю «Call of Duty», то делает возвращает результат, но удаление слова и переворачивание оставшихся слов не дает результатов. Код выглядит следующим образом:хранится proc не возвращает результатов, но запрос
USE [storeboard]
GO
/****** Object: StoredProcedure [sbuser].[sp_ProductSearch] Script Date: 08/26/2010 05:57:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [sbuser].[sp_ProductSearch]
@StoreItemID bigint = null,
@StoreMemberID bigint = null,
@ProductName varchar(50) = null,
@ProductDesc varchar(1000) = null,
@ItemPrice float = null,
@Active bit = null,
@Deleted bit = null,
@CreateDate datetime = null,
@ShipWeight float = null,
@TaxExempt bit = null,
@ShipCost float = null,
@Keywords varchar(1000) = null,
@PG int = 1,
@ROWCT numeric(18,2) = 1,
@COLCT numeric(18,2) = 1,
@MODE varchar(50),
@StoreItemCatID bigint = null,
@SearchStr varchar(100) = null
AS
IF @MODE = 'S1'
BEGIN
SELECT
StoreItemID,
ProductName,
ItemPrice,
PG,
MAXPG,
TOTALRECS,
CoverImg,
StoreItemCatID,
Active
FROM sbuser.tf_ProductSearch(@PG,@ROWCT,@COLCT,@StoreItemCatID,@SearchStr)
END
код относится к tf_productSearch, который это:
USE [storeboard]
GO
/****** Object: UserDefinedFunction [sbuser].[tf_ProductSearch] Script Date: 08/26/2010 05:46:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [sbuser].[tf_ProductSearch] (
@PG int,
@ROWCT numeric(18,2),
@COLCT numeric(18,2),
@StoreItemCatID bigint,
@SearchStr varchar(100) = null)
RETURNS @OUT TABLE (
StoreItemID bigint,
ProductName varchar(50),
ProductDesc varchar(1000),
ItemPrice float,
Active bit,
CreateDate datetime,
ShipWeight float,
TaxExempt bit,
ShipCost float,
Keywords varchar(1000),
PG int,
MAXPG INT,
TOTALRECS INT,
CoverImg varchar(50),
StoreItemCatID bigint)
AS
BEGIN
DECLARE @START numeric(18,2);
DECLARE @END numeric(18,2);
DECLARE @SIZE numeric(18,2);
DECLARE @MAXPG numeric(18,2);
DECLARE @TOTALRECS numeric(18,2);
DECLARE @TOTALRECS_INT int;
DECLARE @MAXPG_INT int;
DECLARE @TOTALRECS_REMAINDER numeric(18,2);
SET @SIZE = @ROWCT * @COLCT
SET @Start = (((@PG - 1) * @Size) + 1)
SET @END = (@START + @SIZE - 1)
DECLARE @TMP1 TABLE (
TmpID bigint identity(1,1) primary key,
StoreItemID bigint,
ProductName varchar(50),
ProductDesc varchar(1000),
ItemPrice float,
Active bit,
CreateDate datetime,
ShipWeight float,
TaxExempt bit,
ShipCost float,
Keywords varchar(1000),
CoverImg varchar(50),
StoreItemCatID bigint)
IF @StoreItemCatID IS NULL
BEGIN
INSERT INTO @TMP1
SELECT
a.StoreItemID,
a.ProductName,
a.ProductDesc,
a.ItemPrice,
a.Active,
a.CreateDate,
a.ShipWeight,
a.TaxExempt,
a.ShipCost,
a.Keywords,
sbuser.sf_StoreItemCoverImg(a.StoreItemID) AS CoverImg,
a.StoreItemCatID
FROM sbuser.StoreItem a
WHERE FREETEXT (a.ProductName, @SearchStr)
AND Deleted = 0
AND Active = 1
ORDER BY a.ProductName
END
ELSE
BEGIN
INSERT INTO @TMP1
SELECT
a.StoreItemID,
a.ProductName,
a.ProductDesc,
a.ItemPrice,
a.Active,
a.CreateDate,
a.ShipWeight,
a.TaxExempt,
a.ShipCost,
a.Keywords,
sbuser.sf_StoreItemCoverImg(a.StoreItemID) AS CoverImg,
a.StoreItemCatID
FROM sbuser.StoreItem a
WHERE FREETEXT (a.ProductName, @SearchStr)
AND a.StoreItemCatID = @StoreItemCatID
AND a.Deleted = 0
AND a.Active = 1
OR a.StoreItemCatID IN (SELECT StoreItemCatID FROM StoreItemCat WHERE ParentID = @StoreItemCatID)
AND FREETEXT (a.ProductName, @SearchStr)
AND a.Deleted = 0
AND a.Active = 1
ORDER BY a.ProductName
END
SELECT @TOTALRECS = MAX(TMPID) FROM @TMP1
SELECT @MAXPG = @TOTALRECS/@SIZE
SET @TOTALRECS_REMAINDER = @TOTALRECS % @SIZE
SET @MAXPG_INT = CAST(@MAXPG AS INT)
SET @TOTALRECS_INT = CAST(@TOTALRECS AS INT)
IF @TOTALRECS_REMAINDER > 0
BEGIN
SET @MAXPG_INT = @MAXPG_INT + 1
END
INSERT INTO @OUT
SELECT
StoreItemID,
ProductName,
ProductDesc,
ItemPrice,
Active,
CreateDate,
ShipWeight,
TaxExempt,
ShipCost,
Keywords,
@PG,
@MAXPG_INT,
@TOTALRECS_INT,
CoverImg,
StoreItemCatID
FROM @TMP1
WHERE (TmpID >= @Start) AND (TmpID <= @END)
RETURN
END
Этот вызов внутри классического веб-страницы ASP с помощью следующего кода:
Dim ProductCat
Dim paryProducts
Dim ProdMaxPG
Dim pstrProductList
Const C_PRODUCTS_FE_PRODUCTROWCOUNT = 4
Const C_PRODUCTS_FE_PRODUCTCOLCOUNT = 5
SearchStr = "duty call"
StoreItemCatID = ""
cData.SQL = "sp_ProductSearch " _
& cData.ProcFld("MODE","S1",2,True) _
& cData.ProcFld("PG",PG,0,True) _
& cData.ProcFld("ROWCT",C_PRODUCTS_FE_PRODUCTROWCOUNT,0,True) _
& cData.ProcFld("COLCT",C_PRODUCTS_FE_PRODUCTCOLCOUNT,0,True) _
& cData.ProcFld("SearchStr",SearchStr,2,True) _
& cData.ProcFld("StoreItemCatID",StoreItemCatID,0,False)
paryProducts = cData.RSArray()
Однако эти сценарии не дают никаких результатов. Тем не менее, введя следующий код непосредственно в окне запроса на SQL-сервере:
USE storeboard
GO
DECLARE @SearchStr varchar(50)
SET @SearchStr = 'duty call';
SELECT
a.StoreItemID,
a.ProductName,
a.ProductDesc,
a.ItemPrice,
a.Active,
a.CreateDate,
a.ShipWeight,
a.TaxExempt,
a.ShipCost,
a.Keywords,
a.StoreItemCatID
FROM sbuser.StoreItem a
WHERE FREETEXT (a.ProductName, @SearchStr)
AND a.Deleted = 0
AND a.Active = 1
ORDER BY a.ProductName
делает возвращает результат. Я из моей лиги здесь и задавался вопросом, может ли один из вас опытных программистов увидеть что-то явно неправильное здесь. Любая помощь, которую могут оказать вам ребята или девочки, будет очень благодарна.
Большое спасибо,
Пол
Не могли бы вы попытаться сократить это на меньший пример - здесь есть много чего читать, и я не думаю, что многие будут упорствовать. –
Я не уверен, что могу сократить его размер, так как весь этот код имеет значение. – neojakey