在SQL上使用where语句进行大规模更新

在SQL上使用where语句进行大规模更新

本文介绍了在SQL上使用where语句进行大规模更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我必须为大量更新sql表编写脚本.
问题在于更新包含where语句.

我会举一个例子来解释.
我有一个包含2列的表格:ID,数字
现在,我在Num列上有一个更改列表:

Hi,

I have to write a script for massive update sql table.
The problem is the update includes a where statement.

I''ll explain by giving an example.
I have a table with 2 columns: ID, Num
Now I have a list of changes to do on the Num column:

old value | new value
----------------------
1         | 100
2         | 3000
3         | 417
4         | 85
5         | 662
6         | 995



测量:
更改前的表将具有以下数据:



Measning:
The table before changes will have the following data:

ID | Num
--------
1  | 1
2  | 1
3  | 2
4  | 3
5  | 3
6  | 3
7  | 3
8  | 3
9  | 4
10 | 5
11 | 6
12 | 6
13 | 6



现在,在进行大规模更新之后,我将得到如下所示的表:



Now after the massive update I''ll have the table looking like that:

ID | Num
--------
1  | 100
2  | 100
3  | 3000
4  | 417
5  | 417
6  | 417
7  | 417
8  | 417
9  | 85
10 | 662
11 | 995
12 | 995
13 | 995



没有规律性,所以我无法计算...
而且我不想写那么多声明"的

反正有这样做吗?



There''s no regularity so I can''t calculate it...
And I don''t want to write so many "declare"s

Is there anyway to do that ?

推荐答案

UPDATE T1
    SET T1.Num = T2.Num
FROM MainTable AS T1
INNER JOIN TableChanges AS T2
    ON T1.ID = T2.ID


DECLARE @CHANGES  AS TABLE (
	OLDVALUE INT
	,NEWVALUE INT
);

DECLARE @MAINTABLE AS TABLE(
	ID INT
	,NUM INT
);

INSERT INTO @CHANGES VALUES (1,100);
INSERT INTO @CHANGES VALUES (2,3000);
INSERT INTO @CHANGES VALUES (3,417);
INSERT INTO @CHANGES VALUES (4,85);
INSERT INTO @CHANGES VALUES (5,662);
INSERT INTO @CHANGES  VALUES (6,995);


INSERT INTO @MAINTABLE VALUES (1,1);
INSERT INTO @MAINTABLE VALUES (2,1);
INSERT INTO @MAINTABLE VALUES (3,2);
INSERT INTO @MAINTABLE VALUES (4,3);
INSERT INTO @MAINTABLE VALUES (5,3);
INSERT INTO @MAINTABLE VALUES (6,3);
INSERT INTO @MAINTABLE VALUES (7,3);
INSERT INTO @MAINTABLE VALUES (8,3);
INSERT INTO @MAINTABLE VALUES (9,4);
INSERT INTO @MAINTABLE VALUES (10,5);
INSERT INTO @MAINTABLE VALUES (11,6);
INSERT INTO @MAINTABLE VALUES (12,6);
INSERT INTO @MAINTABLE VALUES (13,6);

--SELECT * FROM @CHANGES;
SELECT * FROM @MAINTABLE;

UPDATE M SET M.NUM = C.NEWVALUE
FROM @MAINTABLE AS M
	INNER JOIN @CHANGES AS C ON M.NUM = C.OLDVALUE

SELECT * FROM @MAINTABLE;


declare cur cursor for select oldVal,newVal from changeVals

declare @OldVal int
declare @NewVal int

OPEN cur
FETCH NEXT FROM cur INTO @OldVal, @NewVal

WHILE @@FETCH_STATUS = 0
BEGIN
        update table set column = @NewVal where column = @OldVal
        FETCH NEXT FROM cur INTO @OldVal, @NewVal
END

CLOSE cur
DEALLOCATE cur


这篇关于在SQL上使用where语句进行大规模更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 15:28