怎样比较两张表的数据

F117B2 2005-09-12 05:49:55
某个数据库有两张表,内容基本相同,仅个别有差异,请问如何能比较出这两个表的不同之处,并把它列出来!
...全文
838 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwl 2005-09-12
  • 打赏
  • 举报
回复
BINARY_CHECKSUM
返回对表中的行或表达式列表计算的二进制校验值。BINARY_CHECKSUM 可用于检测表中行的更改。

语法
BINARY_CHECKSUM ( * | expression [ ,...n ] )

参数
*

指定对表中的所有列进行计算。BINARY_CHECKSUM 在计算中忽略具有不可比数据类型的列。不可比数据类型是 text、ntext、image、cursor 以及基本类型为前 4 个数据类型之一的 sql_variant。

expression

任何类型的表达式。BINARY_CHECKSUM 在计算中忽略具有不可比数据类型的表达式。

注释
在表中任一行上计算的 BINARY_CHECKSUM(*) 返回相同的值,只要随后没有修改行。BINARY_CHECKSUM(*) 将为大多数(但不是全部)行更改返回不同的值,并可用于检测大多数行修改。

BINARY_CHECKSUM 可应用在表达式列表上,并为给定的列表返回相同的值。如果任意两个表达式列表的对应元素具有相同的类型和字节表示法,则在这两个列表上应用的 BINARY_CHECKSUM 将返回相同的值。对于此定义,特定类型的 NULL 值被认为具有相同的字节表示法。

BINARY_CHECKSUM 和 CHECKSUM 具有相似的功能:它们可用于计算表达式列表上的校验值,且表达式的顺序将影响结果值。BINARY_CHECKSUM(*) 使用的列顺序是表或视图定义中指定的列顺序,包括计算列。

CHECKSUM 和 BINARY_CHECKSUM 仅为字符串数据类型返回不同的值,这类字符串的区域设置可能导致具有不同表示法的字符串进行等值比较。字符串数据类型为 char、varchar、nchar、nvarchar 或 sql_variant(如果 sql_variant 的基本类型是字符串数据类型)。例如,字符串"McCavity"和"Mccavity"的 BINARY_CHECKSUM 值不同。反之,在不区分大小写的服务器中,上述字符串的 CHECKSUM 返回相同的校验值。CHECKSUM 值不应与 BINARY_CHECKSUM 值进行比较。

示例
A.使用 BINARY_CHECKSUM 检测表中一行的改变。
本例使用 BINARY_CHECKSUM 来检测 Northwind 数据库的 Products 表中一行的改变。

/*Get the checksum value before the values in the specific rows (#13-15) are changed.*/
USE Northwind
GO
CREATE TABLE TableBC (ProductID int, bchecksum int)
INSERT INTO TableBC
SELECT ProductID, BINARY_CHECKSUM(*)
FROM Products
/*TableBC contains a column of 77 checksum values corresponding to each row in the Products table.*/

--A large company bought products 13-15.
--The new company modified the products names and unit prices.
--Change the values of ProductsName and UnitPrice for rows 13, 14, and 15 of the Products table.*/
UPDATE Products
SET ProductName='Oishi Konbu', UnitPrice=5
WHERE ProductName='Konbu'

UPDATE Products
SET ProductName='Oishi Tofu', UnitPrice=20
WHERE ProductName='Tofu'

UPDATE Products
SET ProductName='Oishi Genen Shouyu', UnitPrice=12
WHERE ProductName='Genen Shouyu'

--Determine the rows that have changed.
SELECT ProductID
FROM TableBC
WHERE EXISTS (
SELECT ProductID
FROM Products
WHERE Products.ProductID = TableBC.ProductID
AND BINARY_CHECKSUM(*) <> TableBC.bchecksum)

zhangyang555 2005-09-12
  • 打赏
  • 举报
回复
binary_checksum
waterfirer 2005-09-12
  • 打赏
  • 举报
回复
(select * from a
minus
(select a.字段一,a.字段二,... from a,b
where a.字段一=b.字段一,...))
union
(select * from b
minus
(select b.字段一,b.字段二,... from a,b
where a.字段一=b.字段一,...))

vivianfdlpw 2005-09-12
  • 打赏
  • 举报
回复
select *
from 表1 A
join 表2 B on A.唯一列=B.唯一列
where binary_checksum(A.*)<>binary_checksum(B.*)
F117B2 2005-09-12
  • 打赏
  • 举报
回复
补充:两个表的结构是一样的

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧