大型交易的更新声明

时间:2016-07-08 15:55:29

标签: sql sql-server-2008 sql-server-2012 sql-update sql-server-2014

我是这个网站的新手,我真的很难为数据库执行大量更新。我给出了需要更新的交易列表。这里是数据库的一个小例子以及最后的期望输出

问问是。我有一个交易ID列表,其中purchaseID指向PurchaseTypeID = 2,并且希望所有交易都指向具有PruchaseTypeID为5的purchaseID,而不是基于每个客户。例如。如果您在购买表中查找该ID,则交易ID 1具有源购买ID 1987。它的金额为780美元,客户ID为1。此交易被错误地关闭到目的地PurchaseID 32875(每个客户都有一个假购买目的地,其中购买表中的PurchaseTypeID为2和5,以及可以通过IsPurchase列选择的True购买)。现在我想更新该事务以指向购买ID 6000,其再次携带PurchaseTypeID为5.其中包含购买类型ID为5.总结。再次询问是抓取所有具有puchaseID目的地的交易,该目的地指向PurchaseTypeID为2并使其指向携带purchaseTypeId为5的newpurchaseID目的地。 My Database Picture

2 个答案:

答案 0 :(得分:0)

UPDATE <<Your table name>>
  SET PurchaseTypeID = 5
WHERE PurchaseTypeID = 2

或者,如果您想为某些客户更新此信息,您可以:

UPDATE <<Your table name>>
  SET PurchaseTypeID = 5
 WHERE PurchaseTypeId = 2
  AND CustomerID = <<desired customer id>>

或者您是否遇到性能问题?

答案 1 :(得分:0)

试试这个

update p
set p.purchasetypeid = 2 
from purchases p
join transactions t 
on t.PurchaseId = p.PurchaseId
where t.transactionId in (YOUR_ID_LIST) 

根据以下评论进行编辑,我不确定这是最好的方法,但我们走了:


-- Create a temporary table for the records you wanna update, as you can check first and update later
select t.Id, 
(select top 1 p1.purchaseId from Purchases p1 where p1.customerId = p.customerId and p1.PurchaseTypeId = 5) as newPurchaseId
into ##temp_PurchaseTransactions
from Transactions t
join Purchases p
on p.Id = t.PurchaseId;

-- Actually update the Transactions update t set t.PurchaseIdForwardedTo = newPurchaseId from Transactions t join ##temp_PurchaseTransactions t1 on t1.id = t.id