我正在处理归档项目,这涉及将数据从一个数据库中的表移出到归档数据库中的表。该过程如下:验证一个表中的行与另一个表中的行匹配
- 找到您要存档
- 验证它是不是已经归档
- 拷贝过来
- 数据确认所有数据被复制
- 记录删除来自数据源
我正在寻找如何执行第4步。我想确保在我的存档表中给定行中的列中的每个值都是e与生产表中给定行中列中的每个值完全相同。我只想这样做,所以我知道从生产表中删除数据是安全的。我正在使用的表格都有相同的列。现在,我只是在删除它之前检查存档中的行ID是否存在于存档中。我知道我可以做得更好,但我不是一个真正的SQL专家。我能想到的解决方案属于我目前的知识范围,这将是漫长而痛苦的,所以我看到是否有快速的一种查询方式。
这是伪代码,我混我的C#这一点,但我需要的东西,如:
(SELECT * FROM [Production].[dbo].[Table1] WHERE Id = '1234') == (SELECT * FROM [Archive].[dbo].[Table1] WHERE Id = '1234')
是的,我很清楚地知道,不正确的语法;)
'IF NOT EXISTS(SELECT * FROM存档,[...] EXCEPT SELECT * FROM生产WHERE [。 ..])'验证'Production'中是否存在所有'Archive'行(检查另一边是否为练习)。很可能你所描述的所有步骤都应该以更多的基于集合的方式完成,可能使用'MERGE'。 –
EXCEPT的问题是(我认为)两个表都需要相同数量的行。在我的情况下,绝对不会有同样的数字。 – user1059903
'EXCEPT'从第一个表中取出所有行,并删除第二个表中匹配的所有行。如果有任何遗留,则“存档”包含不在“生产”中的行。 (这可能是预料之中的,因为'Archive'包含了更老的东西,但这就是'WHERE'的意思。)不可否认,你可能需要另一种方式(“Production”中有没有不在'Archive'中的行?“)还有'INTERSECT'和'UNION' - SQL有一整套的操作符。一个确切的1对1关系从不需要(即使对于'JOIN')也是如此,事实上,如果需要的话,你需要检查它。 –