如何在 SQL 服务器中循环使用变量

How to use variable on looping in SQL Server

我有一些像这样的 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]?

上使用 with 循环

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

最简单也是最"relational"的方法是使用关系数据库中可用的工具 - tables .

将您的新值放入 table(可以是 table 变量),然后使用 单个基于集合的变量更新您的基础 table 声明。

像这样:

-- 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 table 变量中任意数量的行.....