操作完全相同多行数据中某些行
2016-03-29 10:08
204 查看
架设有如下数据:
如果想更新或删除上面数据中的某些行,那么无法直接用Where指定条件。
可以将数据临时增加一个需要列再处理。
其实不用额外处理数据,利用SQL 内部数据存储的物理地址也可以定位某行数据。
在SQL Server 2005里可以通过%%lockres%%得到数据行对应的物理路径信息,在SQL Server2008里还可以通过%%physloc%% 得到,用sys.fn_PhysLocFormatter 将得到的binary数据转换后就是%%lockres%% 的值。
注意上面的是 Undocumented Function,使用有风险,sys.fn_PhysLocFormatter还有个bug
假设现在要求重复的数据仅留一行,那么就可以利用地址来标识。
按如下执行后将仅余两行数据
执行后:
DECLARE @tb TABLE (col1 INT,col2 VARCHAR(100)) INSERT INTO @tb VALUES (10,'a'), (11,'b'), (10,'a'), (10,'a'), (10,'a'), (10,'a'), (10,'a'), (11,'b') SELECT * FROM @tb
col1 | col2 |
---|---|
10 | a |
11 | b |
10 | a |
10 | a |
10 | a |
10 | a |
10 | a |
11 | b |
可以将数据临时增加一个需要列再处理。
其实不用额外处理数据,利用SQL 内部数据存储的物理地址也可以定位某行数据。
在SQL Server 2005里可以通过%%lockres%%得到数据行对应的物理路径信息,在SQL Server2008里还可以通过%%physloc%% 得到,用sys.fn_PhysLocFormatter 将得到的binary数据转换后就是%%lockres%% 的值。
注意上面的是 Undocumented Function,使用有风险,sys.fn_PhysLocFormatter还有个bug
SELECT %%Physloc%% AS Addr,sys.fn_PhysLocFormatter(%%Physloc%%) AS rowid , * FROM @tb
Addr | rowid | col1 | col2 |
---|---|---|---|
0x2008000003000000 | (3:2080:0) | 10 | a |
0x2008000003000100 | (3:2080:1) | 11 | b |
0x2008000003000200 | (3:2080:2) | 10 | a |
0x2008000003000300 | (3:2080:3) | 10 | a |
0x2008000003000400 | (3:2080:4) | 10 | a |
0x2008000003000500 | (3:2080:5) | 10 | a |
0x2008000003000600 | (3:2080:6) | 10 | a |
0x2008000003000700 | (3:2080:7) | 11 | b |
按如下执行后将仅余两行数据
DELETE t1 FROM @tb AS t1 INNER JOIN (SELECT col1,col2,MAX(%%Physloc%%) as maxIndex FROM @tb GROUP BY col1,col2) t2 ON t1.col1=t2.col1 AND t1.col2=t2.col2 WHERE (t1.%%Physloc%%)!=t2.maxIndex
执行后:
SELECT * FROM @tb
col1 | col2 |
---|---|
10 | a |
11 | b |
相关文章推荐
- JavaScript中将金钱格式化
- Jersey与Spring整合异常:MIME media type, application/json, was not found
- 用open或showModalDialog实现父子页面传值
- struts2中Action的学习
- 初次使用CKeditor replace使用方法
- 学习aiax(javascript)--页面无刷新更新ajax更新时间
- 学习aiax(javascript)--页面无刷新用ajax检查用户名是否已注册(POST方式)
- 学习aiax(javascript)--省份-城市二级下拉联动(POST方式)
- Servlet重新温习,cookie
- 编程算法之暴力破解法
- 编程算法之常数变异法
- 编程算法之加密和解密
- 不忘初心,方得始终。祝各位朋友新的一年心想事成,万事如意,猴年大吉!
- 春晚已经变成一种象征,已经变成了我们春节不可缺少的一部分。
- 编程世界,我的世界。
- 为什么过去这么久,我还没谈恋爱
- 什么是PRD、MRD与BRD
- 毕婚感言
- Python中sort函数、sorted函数和argsort函数
- 机器学习基础(二十八) —— 数据规格化