专注于.NET编程学习和技术分享

SQL Server中没有主键的情况下,使用伪列PHYSLOC查询出不重复的数据

在项目中遇到这么一个需求,从SQL Server数据库中检索一张表,表不存在主键,但是要求按照其中某一列数据不能重复,解决方式是使用SQL Server中的伪列。

伪列(%%PHYSLOC%%)的作用:它指出数据行的物理地址,其格式为Binary(8),其中1~4字节为pageno(页ID),5~6字节为fileno(文件ID),7~8字节为slotno(行ID),也就是每一行数据有且只有唯一个伪列值。

举个栗子:

select *, %%physloc%% as phy from tb_1

现在表还是tb_1,查询出列id不重复的数据行,如果列id中有重复数据时,取第一条。实现SQL如下:

id col1 phy
a 1 0x5900000001000000
b 2

0x5900000001000100

a 3

0x5900000001000200

SELECT id,A.col1
FROM tb_1 A
,(SELECT MIN(%%PHYSLOC%%) AS IDX_ID FROM tb_1 B GROUP BY B.id) C
WHERE A.%%PHYSLOC%% = C.IDX_ID

取到结果应该是

id col1 phy
a 1 0x5900000001000000
b 2

0x5900000001000100

 

 

未经允许不得转载:墨鱼巴巴 » SQL Server中没有主键的情况下,使用伪列PHYSLOC查询出不重复的数据
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址