如何在 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 变量中任意数量的行.....
我有一些像这样的 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 变量中任意数量的行.....