在SQL中同时更新两个表的最佳方法是什么?

时间:2017-07-06 17:45:40

标签: sql stored-procedures triggers

我有两张桌子。一个是“数据”,另一个是“AnalyzedData”

两个表用于,第一个表“Data”用于存储基本数据,另一个表用于存储有关分析数据的详细信息。

在“数据”表中,我们有3列 - “DataID”,“DataName”,“AnalyzedDataID”(“AnalyzedData”的外键) 在AnalyzedData表中,我们有3列。 “AnalyzedDataID”, “AnalyzedataName”

最初我们在DataID和DataName列中有数据。之后,在分析数据后,我们将数据插入到AnalyzedData表中。因此,我们需要在将数据插入AnalyzedData表后更新Data表中的AnalyzedDataID。

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

假设您使用的是SQL Server 2008或更高版本,OUTPUT子句在您的方案中非常有用。您可以在"分析数据"中插入数据。 table,它将生成一个ID,可以在OUTPUT的帮助下捕获。然后,该ID可用于更新您的数据"表

有关如何使用OUTPUT子句的更多详细信息,请参阅Implementing the OUTPUT Clause in SQL Server 2008

答案 1 :(得分:1)

一种方法是在存储过程中启动事务。如果任何插入/更新失败,则回滚事务;否则,你提交交易。所以食谱是:

1. Take the parameters you need in the stored proc
2. Start a transaction
3. Insert/Update each table independently
4. If no error, Commit the TRANSACTION; otherwise, ROLLBACK

一些有用的链接:

Intro to Transactions

Best way to work with Transactions