【发布时间】:2014-01-19 01:01:01
【问题描述】:
尝试创建一个较小的示例数据库,但仍让数据在一定程度上具有统计相关性。如何从表中删除 x % 的行?一直在玩 NEWID() 函数。
【问题讨论】:
标签: sql-server sql-server-2012
尝试创建一个较小的示例数据库,但仍让数据在一定程度上具有统计相关性。如何从表中删除 x % 的行?一直在玩 NEWID() 函数。
【问题讨论】:
标签: sql-server sql-server-2012
DELETE
FROM TABLE_NAME
WHERE PK IN (SELECT TOP (75) PRECENT PK
FROM TABLE_NAME
ORDER BY NEWID())
马丁·史密斯的建议
DELETE T
FROM (SELECT TOP (75) PERCENT *
FROM TABLE_NAME
ORDER BY NEWID()) T
【讨论】:
DELETE T FROM (SELECT TOP (75) PERCENT * FROM TABLE_NAME ORDER BY NEWID()) T 会更有效率。
另一种方法是:
DELETE
FROM table_name
WHERE ABS(CHECKSUM(NEWID())) % 100 < 75 ;
它不会准确删除 75% 的行,但对于更大的表会更快,因为它不需要进行排序。
【讨论】:
我在 Azure SQL 数据库上的工作示例(大多数语法与 SQLServer 兼容):
delete TOP (75) PERCENT
FROM outer_sources.del_me_tbl
【讨论】: