2013-12-12 63 views
0

所以我有一個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'); 

這些都是腳本的前三行。對於這個腳本,我想要減去6283(以便它們從1開始而不是6284)。請注意,有些數值是用單引號''',而另一些則不是。

+0

你爲什麼不只是沒有插入該列的話,那麼後來創建它分配給它primary_key和AUTO_INCREMENT?或者對錶格執行更新,然後從該列中減去6283(儘管如此,您仍然必須重置auto_increment值,否則新行將變大) –

回答

2

wouldldnt你只寫是這樣的:

Update failurelist set failurelist = failurelist - 6283 
+0

哇......我甚至沒有考慮過在事實後更新它! DUH!這就是當你在一天內開始SQL腳本太久時發生的情況!感謝你的回答! –

+0

沒問題! Mazel tov – PCG

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 
+0

儘管父列的數字是用單引號引起的,但它將它們作爲INT插入(因爲列是INT)。我相信它警告說它會轉換數據類型,但它插入OK,我能夠運行UPDATE腳本並將它們全部更正。感謝您的幫助! –