所以我有一个SQL脚本可以在数据库表中插入大量的行(140,000+)。每行都有一列或多列,其中包含数值。我需要用数字减去一些偏移来替换每个数字(参见下面的例子)。任何人都知道一个快速简便的方法或一个程序来做它?基本上我只想指定偏移量是什么,并让它遍历文件,查找所有数字并从每个数字中减去偏移量。
非常感谢任何和所有帮助(或指向正确的方向)!提前谢谢!
示例行:
insert into failurelist (failurelist,failurecode,parent,type,orgid) values (6284, 'ABSRBR', null, null, 'ABC');
insert into failurelist (failurelist,failurecode,parent,type,orgid) values (6285, 'SEIZED', '6284', 'PROBLEM', 'ABC');
insert into failurelist (failurelist,failurecode,parent,type,orgid) values (6286, 'ABSRB-PERF', '6285', 'CAUSE', 'ABC');
这些是脚本的前3行。对于这个脚本,我想减去6283(因此它们从1开始编号而不是6284编号)。请注意,某些数值是单引号''而其他数值不是。
答案 0 :(得分:2)
你不会写这样的东西:
Update failurelist set failurelist = failurelist - 6283
答案 1 :(得分:0)
“父母”栏目似乎是一元关系的事实对我来说有点混乱。如果主键列是整数,为什么父列应表示为字符串。如果它们都是整数,那么你可以:
UPDATE failurelist
SET failurelist = failurelist - 6283,
parent = parent - 6283
目前的形式你需要做这样的事情:
DECLARE @failurelist TABLE
(
failurelist INT,
failurecode varchar(20),
parent varchar(20),
type varchar(20),
orgid varchar(20)
)
insert into @failurelist (failurelist,failurecode,parent,type,orgid) values (6284, 'ABSRBR', null, null, 'ABC');
insert into @failurelist (failurelist,failurecode,parent,type,orgid) values (6285, 'SEIZED', '6284', 'PROBLEM', 'ABC');
insert into @failurelist (failurelist,failurecode,parent,type,orgid) values (6286, 'ABSRB-PERF', '6285', 'CAUSE', 'ABC');
UPDATE @failurelist
SET failurelist = failurelist - 6283,
parent = CAST(CAST(parent AS INT) -6283 AS varchar(20))
现在表变量@failurelist包含所需的结果。您只需要使用表变量的结果填充实际表,如此
INSERT INTO failurelist
SELECT * FROM @failurelist