如何按条件从两个表中的一个中选择记录,然后更新它

时间:2016-03-22 10:04:13

标签: sql sql-server database tsql sql-update

我有两个表 - DataRecord和DataRecordArchive

新的(唯一的dataRecordID - ex。'id1')dataRecord插入到版本0的DataRecord表中。 当对某些现有dataRecord(dataRecordID'id1'已存在于DataRecord表中)执行(几乎每次)更新时 - 将现有dataRecord(id:'id1'版本:0)插入DataRecordArchive表,然后更新dataRecord并且版本更改为1(依此类推,版本2,3等)。因此,在表DataRecordArchive表的最后,记录的id为:'id1',version:0,而在DataRecord表中,记录的id为id:'id1',版本:1。

我需要用一些值更新dataRecord(bool值 - 不需要将行复制到DataRecordArchive表中 - 例如'correctFlag'),但是我需要选择要更新的表,因为我有id和版本,所以要更新的记录可能在 DataRecord表或DataRecordArchive表。例如,如果我需要使用id1版本0更新dataRecord - 该记录位于DataRecordArchive表中。如果我需要使用id1版本1更新dataRecord,则该记录位于DataRecord表中。

类似的东西:

更新  从DataRecord中选择count()的情况,其中id ='id1'且version = 0> 0然后 DataRecord  当从DataRecordArchive中选择count()时,其中id ='id1'且version = 0> 0然后 DataRecordArchive 结束 set correctFlag = 1其中id ='id1'和version = 0

此更新的正确SQL语句是什么?

3 个答案:

答案 0 :(得分:1)

我无法发表评论,因此会发布作为答案。理想情况下,我们需要您的表结构,从表中抽取样本数据来正确建议。但是,基于有限的信息,我建议使用动态sql。您将使用动态sql根据条件操作SQL查询的from子句。

请发布表格结构和示例数据,以便我们为您提供准确的查询。

答案 1 :(得分:1)

创建一个联合两个表的视图。 更新视图。

答案 2 :(得分:0)

您必须创建一个SP。在该SP中,您可以传递数据,然后根据可以更新表的版本检查数据。

例如:

create procedure update_data 

@version @int,
@id int,

As

if @version == 1
-- update in table1
else
-- update in table2

GO