SQL Server 2000中的表Diff

时间:2009-09-29 19:54:58

标签: c# algorithm sql-server-2000

我正在使用SQL Server 2000,并且给出了一组数据(具有唯一ID),我想弄清楚数据库中包含行的差异,并在唯一ID上进行匹配。我也试图尽可能保持灵活性。

我可以在前端使用C#/ VB来获取参数,甚至可以返回内容。也许传递XML并获得XML作为回报?

例如,我想要一个调用的函数:

// returns the columns that are different
func( A, B, C ) {

}

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

有一个很酷的技巧可以用UNION

SELECT MAX(tbl) AS TABLE_NAME, unique_key
FROM (
    SELECT 'table1' AS tbl, unique_key
    FROM table1
    UNION ALL
    SELECT 'table2' AS tbl, unique_key
    FROM table2
) AS X GROUP BY unique_key
HAVING COUNT(*) = 1

这将显示一侧或另一侧具有另一侧没有的行。

显然,这可以扩展到做得更多。

或者,您可以执行INNER JOIN(匹配数据不同的键),LEFT JOIN(一侧缺少密钥)和RIGHT JOIN(另一方面密钥丢失)和UNION他们在一起。

我实际上有一个实用程序SP(它使用一种或另一种方法,具体取决于您需要的选项),它将比较任何两个表,并具有用于设置哪些列被视为键的一部分,哪些列要忽略,限制的选项它可以选择将差异写入表中。

答案 1 :(得分:2)

我会使用现有的“数据差异”工具,如

马克

答案 2 :(得分:0)

是的,同意Marc,一个专业工具效果最好,类似于Volpet Table Diff的SQL Server