积极答复者
SQL如何以给定概率随机删除一些记录?

问题
答案
-
-- 测试表 SELECT * INTO #t FROM sys.all_columns; -- 删除 DELETE b FROM #t b CROSS APPLY( SELECT ABS(CHECKSUM(NEWID())) % 3 ) D(v) WHERE d.v=0 ; -- 删除测试表 DROP TABLE #t;
更简明易读的写法:
DELETE 表 FROM 表 CROSS APPLY (SELECT BINARY_CHECKSUM(NEWID())%3 AS 随机数) AS 随机列 WHERE 随机数=0
意思是对表的每一行生成一个随机数,最终产生一个随机数组成的随机列拼到原表旁边,相当于临时创建了一个视图进行删除
- 已标记为答案 终结之始 2018年2月1日 3:53
全部回复
-
参考
https://stackoverflow.com/questions/1045138/how-do-i-generate-random-number-for-each-row-in-a-tsql-select
DELETE FROM 表 WHERE
ABS(CHECKSUM(NewId())) % 14
专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 已编辑 Shuanghua Li 2018年1月25日 0:45
-
-- 测试表 SELECT * INTO #t FROM sys.all_columns; -- 删除 DELETE b FROM #t b CROSS APPLY( SELECT ABS(CHECKSUM(NEWID())) % 3 ) D(v) WHERE d.v=0 ; -- 删除测试表 DROP TABLE #t;
更简明易读的写法:
DELETE 表 FROM 表 CROSS APPLY (SELECT BINARY_CHECKSUM(NEWID())%3 AS 随机数) AS 随机列 WHERE 随机数=0
意思是对表的每一行生成一个随机数,最终产生一个随机数组成的随机列拼到原表旁边,相当于临时创建了一个视图进行删除
- 已标记为答案 终结之始 2018年2月1日 3:53