我遇到一个问题,让我的递归脚本从表变量中找到当前行。我已经验证了表变量中有数据。那部分工作得很好,但是我的脚本的下一部分一直在打击我的其他声明。它对临时表有很好的作用,但我试图把它变成一个函数,所以我可以用其他脚本更容易地调用它。
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
答案 0 :(得分:0)
回答了我自己的问题。忘了设置我的总数= @@ rowcount。