34,874
社区成员
发帖
与我相关
我的任务
分享

--先加一个索引:
create index ix_f_test_dLockTime_iLock on f_test( dLockTime, iLock );
再执行下面的SQL, 贴一下结果, 不需要搞什么执行计划, 贴消息出来看下就可以了
SET STATISTICS IO ON
SET STATISTICS TIME ON
DECLARE @cLockUser VARCHAR(20)
SET @cLockUser = 'C001'
SELECT [iNo],
[cName],
[iLock],
[dLockTime],
[cLockUser]
FROM [test].[dbo].[f_test]
WHERE iLock = 0
union ALL --超时锁的
SELECT [iNo],
[cName],
[iLock],
[dLockTime],
[cLockUser]
FROM [test].[dbo].[f_test]
WHERE iLock = 1
--这里有修改,datediff 换 dateadd
AND dLockTime < DATEADD(mi, -5, GETDATE())
union ALL --自己锁的
SELECT [iNo],
[cName],
[iLock],
[dLockTime],
[cLockUser]
FROM [test].[dbo].[f_test]
WHERE iLock = 1
AND cLockUser = @cLockUser
union ALL --没时间的
SELECT [iNo],
[cName],
[iLock],
[dLockTime],
[cLockUser]
FROM [test].[dbo].[f_test]
WHERE iLock = 1
AND dLockTime IS NULL
SELECT [iNo],
[cName],
[iLock],
[dLockTime],
[cLockUser],
CASE WHEN iLock = 0 THEN '闲'
WHEN iLock = 1 AND cLockUser = @cLockUser THEN '闲'
WHEN iLock = 1 AND dLockTime IS NULL THEN '闲'
--这里有修改,datediff 换 dateadd
WHEN iLock = 1 AND dLockTime < DATEADD(mi, -5, GETDATE()) THEN '闲'
ELSE '锁' END
FROM [test].[dbo].[f_test]
DATEADD(mi, -5, GETDATE())