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

Sql 如何根据条件从两个表中选择一个记录,然后更新它,sql,sql-server,database,tsql,sql-update,Sql,Sql Server,Database,Tsql,Sql Update,我有两个表-DataRecord和DataRecordArchive 新的(唯一的dataRecordID-例如“id1”)dataRecord插入到版本为0的dataRecord表中。 在对某些现有数据记录(dataRecordID“id1”已存在于dataRecord表中)执行(几乎每次)更新时,将现有数据记录(id:“id1”版本:0)插入DataRecordArchive表,然后更新dataRecord,并将版本更改为1(依此类推为版本2、3等)。因此,在DataRecordArchiv

我有两个表-DataRecord和DataRecordArchive

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

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

比如:

update 
 case when select count (*) from DataRecord where id = 'id1' and version=0 >0 then
DataRecord 
 when select count (*) from DataRecordArchive where id = 'id1' and version=0 >0 then
DataRecordArchive 
end
set correctFlag =1 where id= 'id1' and version = 0

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

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


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

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


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

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

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

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

例如:

create procedure update_data 

@version @int,
@id int,

As

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

GO

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

例如:

create procedure update_data 

@version @int,
@id int,

As

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

GO

动态SQL并不像我希望的那样优雅。如果这是唯一的方法,我会的。动态SQL没有我想要的那么优雅。如果这是唯一的办法,我会的。