select查询在sp中返回空,但单独运行时,它不为空。为什么?

时间:2015-06-12 08:57:41

标签: sql-server stored-procedures

我有一个存储过程,我写入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

2 个答案:

答案 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
你检查过这部分了吗?因为光标在某些操作之前正在关闭。