我有两个表 - 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语句是什么?
答案 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