我有一个存储过程,我写入Table并读取表。我写没有问题但是当我想读它时它返回空。但是当我选择查询并运行它返回数据时它不是空的。为什么会这样。 这是我的代码。我将全文索引转储和TempTable提供给标签,标题和正文列。
IF LEFT(@splitdata,1) = '#'
BEGIN
SET @splitdata = (SELECT REPLACE(@splitdata,'#',''))
INSERT INTO [WebTR].[dbo].[TempTable]
SELECT p.*
FROM [WebTR].[dbo].[Dump] AS p
INNER JOIN containstable([WebTR].[dbo].[Dump], tags, @splitdata) AS k
ON p.dumpID = k.[key]
end
SET @replacedLast += @replaced2
FETCH NEXT FROM TableA_cursor INTO @row
我首先插入temptable然后
IF EXISTS(SELECT * FROM WebTR.dbo.TempTable)
BEGIN
SELECT @replacedLast AS withtag
select dumpId,title,source,tags,creationdate,status,body,createdBy,max(rank) as rank,'olsanaaa' AS sinir
from
((SELECT p.*, k.rank
FROM WebTR.dbo.TempTable AS p
INNER JOIN containstable(WebTR.dbo.TempTable, title,'"*cunku*"' ) AS k
ON p.dumpID = k.[key]
)
union
(
SELECT p.*, k.rank
FROM WebTR.dbo.TempTable AS p
INNER JOIN containstable(WebTR.dbo.TempTable, body, '"*cunku*"') AS k
ON p.dumpID = k.[key]
))y group by dumpId,title,source,tags,creationdate,status,body,createdBy
order by rank DESC
END
正如你所看到的那样if if当我只选择select查询时它返回数据但是当执行存储过程时它返回空,即使它进入if块
这是他满满的sp:
USE [WebTR]
GO
/****** Object: StoredProcedure [dbo].[search] Script Date: 10.6.2015 16:19:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[search]
@param1 varchar(250)
AS
BEGIN
declare @searchString varchar(250)
set @searchString = LTrim(RTrim(@param1))
TRUNCATE TABLE [WebTR].[dbo].[TempTable]
--SELECT ROW_NUMBER() OVER(ORDER BY @param1 ASC) AS row , * INTO #temp1 from WebTR.dbo.fnsplitstring(@searchString ,'')
SELECT ROW_NUMBER() OVER(ORDER BY CAST(SUBSTRING(splitdata, 0, 2) AS CHAR(1)) desc) AS row,* INTO #params from WebTR.dbo.fnsplitstring(@searchString ,'')
SET NOCOUNT ON
DECLARE @row INT
DECLARE @splitdata VARCHAR(50)
DECLARE @replaced1 VARCHAR(500)
DECLARE @replaced2 VARCHAR(500)
DECLARE @replacedLast VARCHAR(500)
DECLARE @last VARCHAR(500)
DECLARE TableA_cursor CURSOR FOR SELECT row FROM #params
SET @last = (SELECT COUNT(*) FROM #params)
SET @replacedLast = ''
OPEN TableA_cursor
FETCH NEXT FROM TableA_cursor INTO @row
WHILE @@FETCH_STATUS = 0
BEGIN
SET @splitdata = (SELECT splitdata FROM #params WHERE row=@row)
IF LEFT(@splitdata,1) = '#'
BEGIN
SET @splitdata = (SELECT REPLACE(@splitdata,'#',''))
BEGIN TRANSACTION
INSERT INTO [WebTR].[dbo].[TempTable]
SELECT p.*
FROM [WebTR].[dbo].[Dump] AS p
INNER JOIN containstable([WebTR].[dbo].[Dump], tags, @splitdata) AS k
ON p.dumpID = k.[key]
COMMIT TRANSACTION
end
ELSE
begin
IF LEFT(@splitdata,1)='-'
BEGIN
IF RIGHT(@replacedLast,4) = 'AND '
BEGIN
SET @replaced1 =('NOT ')
END
ELSE
BEGIN
SET
@replaced1 =('NOT ')
end
SET @replaced2= @replaced1 + (SELECT REPLACE (@splitdata, '-', '"*'))
SET @replaced2= @replaced2 + '*" ' + 'AND '
END
ELSE
BEGIN
SET @replaced2 =('"*')
SET @replaced2 = @replaced2 + (SELECT @splitdata + '*" AND ')
END
SET @replacedLast += @replaced2
END
FETCH NEXT FROM TableA_cursor INTO @row
IF @@FETCH_STATUS !=0
BEGIN
IF RIGHT(@replacedLast,4)='AND '
BEGIN
SET @replacedLast =LEFT(@replacedLast,(LEN(@replacedLast)-3))
END
END
END
CLOSE TableA_cursor
DEALLOCATE TableA_cursor
IF EXISTS(SELECT * FROM WebTR.dbo.TempTable)
BEGIN
SELECT @replacedLast AS withtag
select dumpId,title,source,tags,creationdate,status,body,createdBy,max(rank) as rank,'olsanaaa' AS sinir
from
((SELECT p.*, k.rank
FROM WebTR.dbo.TempTable AS p
INNER JOIN containstable(WebTR.dbo.TempTable, title,'"*cunku*"' ) AS k
ON p.dumpID = k.[key]
)
union
(
SELECT p.*, k.rank
FROM WebTR.dbo.TempTable AS p
INNER JOIN containstable(WebTR.dbo.TempTable, body, '"*cunku*"') AS k
ON p.dumpID = k.[key]
))y group by dumpId,title,source,tags,creationdate,status,body,createdBy
order by rank DESC
END
ELSE
BEGIN
select * into #temp1
from
((SELECT p.*, k.rank
FROM [WebTR].[dbo].[Dump] AS p
INNER JOIN containstable([WebTR].[dbo].[Dump], title, @replacedLast) AS k
ON p.dumpID = k.[key]
)
union
(
SELECT p.*, k.rank
FROM [WebTR].[dbo].[Dump] AS p
INNER JOIN containstable([WebTR].[dbo].[Dump], body, @replacedLast) AS k
ON p.dumpID = k.[key]
))x
select dumpId,title,source,tags,creationdate,status,body,createdBy,max(rank) as rank
from #temp1 with (NOLOCK)
group by dumpId,title,source,tags,creationdate,status,body,createdBy
order by rank DESC
DROP TABLE #temp1
end
END
答案 0 :(得分:1)
我在SQL Server 2008中也有这种不当行为。如果使用全文索引插入和检索太快,则查询将不会产生新查询。
也许您需要手动填充全文索引。
参见基于AdventureWorks的示例
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;
GO
https://technet.microsoft.com/en-us/library/ms142575.aspx
希望人口更新将解决您的问题。
祝你好运, 离子
答案 1 :(得分:1)
CLOSE TableA_cursor
DEALLOCATE TableA_cursor
你检查过这部分了吗?因为光标在某些操作之前正在关闭。