TSQL删除不在top(5)中的行,键超过3列

时间:2015-09-07 17:46:49

标签: sql-server tsql sql-server-2008-r2

我在SQL Server 2008 R2中遇到存储过程问题。

我在EventTimeStampUserIDSecurityEventCode列上有一个包含密钥的表格。

我想删除除最新的5个以外的所有行。

DELETE 
FROM dbo.UsersSecurityEvents
WHERE  
    EventTimeStamp NOT IN (SELECT TOP (@maxSecurityEventByUser)
                               EventTimeStamp, UserID, SecurityEventCode
                           FROM dbo.UsersSecurityEvents
                           ORDER BY EventTimeStamp)

现在的问题是:如何将值UserIDSecurityEventCode放入where子句中?我需要使用光标吗?我大部分时间都使用Entity Framework作为我的SQL,但需要对旧应用程序进行更改。

感谢您的帮助。

解决

我太傻了。我有一个参数@UserID

所以

    DELETE 
    FROM dbo.UsersSecurityEvents
    WHERE  
        UserID = @UserID 
        AND EventTimeStamp NOT IN (SELECT TOP (@maxSecurityEventByUser)
                                       EventTimeStamp
                                   FROM dbo.UsersSecurityEvents
                                   ORDER BY EventTimeStamp)

是解决方案。

抱歉浪费你的时间。

1 个答案:

答案 0 :(得分:0)

尝试

DELETE FROM
 dbo.UsersSecurityEvents WHERE
 EventTimeStamp NOT IN ( 
     SELECT Top 5  EventTimeStamp
     FROM dbo.UsersSecurityEvents 
     ORDER BY EventTimeStamp desc
)