2017-04-23 86 views
0

如何更新多行,以便所有行都具有唯一標識?例如:使用唯一標識更新多行

MyTable的:

id/product_id/price/sell_price/amount 
231/122/10/5/6 
276/122/5/3/16 
298/122/20/12/60 
210/122/100/55/1 

現在,如果我插入這些值到臨時表

(select * into #tmp_table from MyTable where product_id=122) 

現在我想做出一些改變和插入這些值回原始表「 MyTable「,但我在這裏掙扎,如何獲得唯一的id值?

回答

0

在創建表後,使用updatejoin

update t 
    set ? = tt.? 
    from MyTable t join 
     #tmp_table tt 
     on t.id = tt.id; 

目前還不清楚你想要什麼設定值,但只是把適當的邏輯set子句。

編輯:

根據您的意見。您應該簡單地將id列定義爲identity列。然後:

insert into MyTable (product_id, price, sell_price, amount) 
    select product_id, price, sell_price, amount 
    from #tmp_table; 

您還可以生成新的ID,如果你喜歡:

insert into MyTable (id, product_id, price, sell_price, amount) 
    select x.maxid + row_number() over (order by (select null)) as id, 
      tt.product_id, tt.price, tt.sell_price, tt.amount 
    from #tmp_table tt cross join 
     (select max(id) as maxid from MyTable) x; 

但身份ID似乎更表的精神。

+0

謝謝你的回答。也許我表達得不清楚。其實我不想更新現有的記錄,我想要有這些記錄,但希望根據現有值插入新值。在最終結果中,我希望根據此示例查看具有唯一標識值的8行。 – Ziil

0

您可以使用簡單的更新與臨時表中加入或合併

UPDATE y 
    set y.amount = t.amount+100 --your update columns 
    from yourProduct y 
    inner join #tmp t 
    on y.id = t.id and y.product_id = t.product_id 

你的表

create table yourProduct (id int, product_id int, price int, sell_price int, amount int) 

insert into yourProduct (id, product_id, price, sell_price, amount) values 
(231,122,10 ,5 ,6 ) 
,(276,122,5 ,3 ,16) 
,(298,122,20 ,12,60) 
,(210,122,100,55,1 ) 


select * into #tmp from yourProduct where product_id = 122 
+0

謝謝你的回答。也許我表達得不清楚。其實我不想更新現有的記錄,我想要有這些記錄,但希望根據現有值插入新值。 在最終結果中,我希望根據此示例查看具有唯一標識值的8行。 – Ziil

0

會建議加用遞增的產品ID的新列:秒。

alter table MyTable add productid Int Identity(1,1) 

如果使用舊產品ID:s,則可以刪除舊列。

alter table MyTable drop column product_id 

如果你希望使用的列使用舊名稱:

exec sp_rename 'productid', 'MyTable.product_id', 'column'; 

我會強烈建議,當你做到了這一點,爲了保護UNIQUE約束添加此列你自己將來從重複的產品ID:s。

alter table MyTable 
add unique (product_id);