我要求将两个表数据与一个数据库中的数据进行比较,并将不常见的数据存储在同一数据库中名为关系数据的单独表中。
如何比较这个表数据?
比较他们的任何工具,我们可以使用任何工具将不常见的数据存储在单独的表中吗?我忘了告诉一件事,两个表具有相同的数据但列名不同,这意味着例如第一个表有 20 列和 2 列和表有 50 列但其中 4 列是具有不同行数和不同列名的匹配数据每个表。基于这些列数据匹配我需要找到行并存储到另一个表中
我要求将两个表数据与一个数据库中的数据进行比较,并将不常见的数据存储在同一数据库中名为关系数据的单独表中。
如何比较这个表数据?
比较他们的任何工具,我们可以使用任何工具将不常见的数据存储在单独的表中吗?我忘了告诉一件事,两个表具有相同的数据但列名不同,这意味着例如第一个表有 20 列和 2 列和表有 50 列但其中 4 列是具有不同行数和不同列名的匹配数据每个表。基于这些列数据匹配我需要找到行并存储到另一个表中
作为编写 SQL 脚本的替代方法,您可以将两个表中的整个结果复制到 .csv 文件,然后使用 win merge 比较两者:
http://winmerge.org/downloads/
我过去在比较大量数据时使用过这种技术,并且效果很好。
这可以在 t-sql 中轻松完成。但是,在您的问题中,您要求使用工具来完成此操作。如果您只是想购买一个工具来执行此操作,在我的工作中,我们使用 Redgate 工具将代码从测试部署到生产,我相信如果您有一点创意,您可以获得SQL 数据比较工具来做些什么你要求。
如果您选择并比较这两个表,它将生成一个从一个到另一个的更改脚本。如果您只从一个中获取更改,保存脚本,然后返回,单击箭头并仅从源中获取更改,那么您应该具有不常见的属性。
试试这个查询,我认为它的工作
插入关系(r1,r2,r3,....rn) (选择 s1,s2,s3,...sn 从 info.informationcity 不在的信息信息(从客户中选择客户城市) 和 info.informationstate 不在(从客户中选择客户状态))
假设你们两个表有相同的结构
又快又脏?
;WITH cte AS (
SELECT 1 AS OriginTable, *
FROM OriginTable1
UNION SELECT 2 AS OriginTable, *
FROM OriginTable2
)
SELECT {put here the list of all your columns}
INTO [YourDeltaTable]
FROM cte
GROUP BY {put here the list of all your columns}
HAVING COUNT(*) = 1
您可以使用以下查询通过从多个表中检索数据来将数据插入目标表
插入 TargetTable(list_of_columns) (从中选择列列表 表1 t1 加入表2 t2 在 (t1.common_column != t2.common_column))
src 列列表计数和目标列列表计数应该相等
这是一个假设您的表结构相同的简单示例
DECLARE @a table (
val char(1)
);
DECLARE @b table (
val char(1)
);
INSERT INTO @a (val)
VALUES ('A'), ('B'), ('C');
INSERT INTO @b (val)
VALUES ('B'), ('C'), ('D'), ('E');
DECLARE @mismatches table (
val char(1)
);
INSERT INTO @mismatches (val)
SELECT val -- All those from @a
FROM @a
EXCEPT -- Where not in @b
SELECT val
FROM @b;
INSERT INTO @mismatches (val)
SELECT val -- All those from @a
FROM @b
EXCEPT -- Where not in @b
SELECT val
FROM @a;
SELECT *
FROM @mismatches