t-sql - 删除表中 N 个最旧的条目

标签 t-sql sybase

如何删除 N 个最旧的条目。我的Sybase有限。我需要编写一个存储过程,它接受数字 X,然后只在表中保留 X 个最新条目。

例如: 假设ID是自动递增的。它越小,该条目就越旧。

ID  Text
=========
1   ASD
2   DSA
3   HJK
4   OIU

我需要一个像这样执行的程序。

execute CleanUp 2

结果将是

ID  Text
=========
3   HJK
4   OIU

最佳答案

注意:SQL Server 语法,但应该可以工作

Delete from TableName where ID in 
    (select top N ID from TableName order by ID )

如果您希望 N 作为参数,则必须构造语句字符串并执行它

declare @query varchar(4000)
set @query = 'Delete from TableName where ID in '
set @query = @query + '(select top ' + @N + ' ID from TableName order by ID )'
exec sp_executesql @query

关于t-sql - 删除表中 N 个最旧的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/797609/

相关文章:

SQL:尝试在数据库的所有行中标记同一客户 ID 和订单号内的最早发货日期

sql-server - T-SQL 插入触发器 - 提取部分文本以进行插入

sybase - 动态生成的数据窗口中的列名称

java - 如何最好地将我的应用程序与不可靠的数据库隔离开来?

java - Spring Boot、JPA、@Query、Sybase 存储过程

sql-server - 在大型数据库中搜索特定 ID?

SQL 标量值函数返回 Null

ASP.NET 权限框架?

mysql - 如何将 iSQL 中的数据输出到带有列名的 Excel 文件?

mysql - 为什么字符串搜索在 sybase 中区分大小写,而在许多其他数据库中则不区分大小写