select 在 sp 中查询 returns 为空,但当 运行 单独查询时,它不是空的。为什么?

select query returns empty in sp but when run it alone, it is not empty. Why?

我有一个写入 Table 并读取 table 的存储过程。我写没有问题,但是当我想阅读它时 returns 是空的。但是当我 select 查询并且 运行 它 returns 数据时它不是空的。为什么可以。 这是我的代码。我将全文索引 Dump 和 TempTable 赋给标签、标题和 body 列。

    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

我先插入温度table然后

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

正如你所看到的那样,当我 select 仅 select 查询它 returns 数据时,如果阻塞,但是当执行存储过程时,它 returns 为空,即使它进入如果块

这是他完整的 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

我在 SQL Server 2008 中也有这种不当行为。如果您使用全文索引插入和检索速度太快,您的查询将不会生成新查询。

也许您需要手动填充全文索引。

查看基于 AdventureWorks 的示例

ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;
GO

https://technet.microsoft.com/en-us/library/ms142575.aspx

希望人口更新能解决您的问题。

此致, 离子

CLOSE TableA_cursor
DEALLOCATE TableA_cursor

这部分你检查了吗?因为您的光标在某些操作之前正在关闭。