我有一个包含一些需要更新的数据的表。我们假设表结构是
(Code, Col1, Col2, Col3)
我需要对具有代码值的特定行运行更新(假设值为(1,3,4,5,9,6,30,25,87,100)
)。
Col3值为Col1 + Col2,Col1值为(1001,1025,400,25,963,13,432,25,87,100)
。
我创建了以下SQL查询:
Declare @Col1 float
Declare @Code nvarchar
set @Col1 = 1001
set @Code = 1
update MyTable set
Col1 = @Col1,
Col3 = @Col1 + Col2
where Code = @Code
因此,在声明行和手动分配值之后复制所有这些代码,是否可以创建两个数组,一个用于代码值的其他Col1值,并迭代代码并动态更新它?
答案 0 :(得分:2)
通常在SQL中使用循环或游标迭代数据行,因为在大多数情况下它会慢得多。
在你的特定情况下,没有必要迭代一些"数组"执行所需的更新。
相反,你可以像这样创建临时表:
create table #temp_table (Col1 float, Code nvarchar(10))
填写您的数据,如:
insert into #temp_table (Col1, Code)
select 1001, '1'
union all
select 1025, '3'
... and so on
然后执行更新:
update MyTable set
Col1 = T1.Col1,
Col3 = T1.Col1 + Col2
from MyTable as T
inner join #temp_table as T1 on T.Code = T1.Code
答案 1 :(得分:0)
您不需要为此循环,您只需使用要更新的值创建Cte(或临时表),并在JOIN
语句中创建UPDATE
:
;With ToUpdate (Code, Col1) As
(
Select 1, 1001 Union All
Select 3, 1025 Union All
Select 4, 400 Union All
Select 5, 25 Union All
Select 9, 963 Union All
Select 6, 13 Union All
Select 30, 432 Union All
Select 25, 25 Union All
Select 87, 87 Union All
Select 100, 100
)
Update T
Set Col1 = U.Col1,
Col3 = U.Col1 + Col2
From MyTable T
Join ToUpdate U On U.Code = T.Code