SQL Server无法从表变量中获取当前递增的行

时间:2016-04-18 15:39:13

标签: sql-server

我遇到一个问题,让我的递归脚本从表变量中找到当前行。我已经验证了表变量中有数据。那部分工作得很好,但是我的脚本的下一部分一直在打击我的其他声明。它对临时表有很好的作用,但我试图把它变成一个函数,所以我可以用其他脚本更容易地调用它。

BEGIN

DECLARE @totalrows INT
DECLARE @currentrow INT = 1
DECLARE @tempTable TABLE (value VARCHAR(255), ID INT)

SELECT * Into #temp FROM dbo.fn_split((SELECT TOP (1) address_full FROM sde.gis.BUSINESS), ' ') 



ALTER TABLE #temp
ADD ID INT IDENTITY


INSERT into @tempTable ( value, ID )
SELECT *
FROM #temp

SELECT * FROM @tempTable

DECLARE @address_no MONEY
DECLARE @pre_dir VARCHAR(2)
DECLARE @street_name VARCHAR(45)
DECLARE @suffix VARCHAR(20)     


WHILE ( @currentrow <= @totalrows )
    BEGIN




        DECLARE @cur_value VARCHAR(50)



        SELECT  @cur_value = value
        FROM    @tempTable
        WHERE   id = @currentrow



        PRINT 'Working on ' + @cur_value



        IF ( @currentrow = 1 )
            BEGIN

                IF ( ISNUMERIC(@cur_value) = 1 )
                    SET @address_no = CAST(@cur_value AS MONEY)
                ELSE
                    RETURN
          END





        IF ( @currentrow = 2 )   -- Is this a direciton
            BEGIN

                IF EXISTS ( SELECT  1
                            FROM    mead.dbo.street_direction
                            WHERE   street_direction = @cur_value )
                    BEGIN
                        SET @pre_dir = @cur_value

                    END
                ELSE
                    BEGIN
                        SET @street_name = @cur_value

                    END
            END


        IF ( @currentrow > 2 )   -- Is this a direciton
            BEGIN
                IF EXISTS ( SELECT  1
                            FROM    mead.dbo.street_type
                            WHERE   street_type = @cur_value )
                    BEGIN
                        SET @suffix = @cur_value



                    END
                ELSE
                    BEGIN
                        IF ( @street_name IS NULL )
                            SET @street_name = @cur_value
                        ELSE
                            SET @street_name = @street_name + ' ' + @cur_value
                    END

            END

        SET @currentrow = @currentrow + 1

    END

END



SELECT  @address_no ,
        @pre_dir ,
        @street_name ,
        @suffix


DROP TABLE #temp

1 个答案:

答案 0 :(得分:0)

回答了我自己的问题。忘了设置我的总数= @@ rowcount。