如何在SQL Server中使用变量进行循环

时间:2016-06-19 04:52:18

标签: sql sql-server sql-server-2005

我有一些varchar个变量:

@var1='data a', 
@var2='data b',
@var3='data c', 
...,
@varn='data n'

我想在循环脚本上插入这些变量。

DECLARE @counter INT
SET @counter = 1

WHILE(@counter <= n)
BEGIN
    UPDATE [table] 
    SET [header] 
    WHERE data = [@var1-n]

    SET @counter = @counter + 1
END
GO

如何制作@ var1 - @varn可以在 [@ var1-n] 上使用循环?

2 个答案:

答案 0 :(得分:0)

动态选择变量没有本地灵活的方式。你要么必须提出一些丑陋的case语句,动态SQL等等,但也许最优雅的方法是将变量缓存在表中然后你就能够根据迭代的任何动态选择数据要求。此外,可能有一种方法可以解决您的问题,而无需执行while循环并使其成为基于集合的操作。

答案 1 :(得分:0)

最简单和最“关系”的方式是使用关系数据库中提供的工具 - 表格

将新值放入表中(可以是表变量),然后使用单个,基于集合的语句更新基表。

这样的事情:

-- declare the table to hold the keys and new values
DECLARE @NewValues TABLE (Data VARCHAR(20), NewHeader VARCHAR(50))

-- insert new data into this table variable instead of having n separate variables
INSERT INTO @NewValues (Data, NewHeader)
VALUES ('data a', 'New Header a'), ('data b', 'New Header b'), 
       ....., ('data n', 'New Header n');

-- update your base table in a SINGLE set-based statement
UPDATE dbo.YourBaseTable
SET Header = nv.NewHeader
FROM @NewValues nv 
WHERE dbo.YourBaseTable.Data = nv.Data

一个很好的简单语句,可以处理@NewValues表变量中的任意数量的行.....