我是觸發器的新手,我有一些困難我試圖創建一個觸發器,當有人登錄到我們的WMS時,它會記錄用戶已登錄WMS多久以及他們已經多久閒置。我最初創建了這個存儲過程,它工作的很好,但當我試圖把它變成一個觸發器時,它不做任何事情或返回一個錯誤。SQL Server 2008 R2創建觸發器
我已經嘗試將整個代碼放入觸發器中,並將觸發器指向存儲過程。
這是我目前的代碼,即使已滿足基本條件,也沒有任何反應。
Use WMS;
Go
Create Trigger ExpiredUsersRmv
On LogFile
For Insert
As
--Total Users before stored procedure runs
Declare @TtlUsers Int
Set @TtlUsers = '7';
--Idle time limit
Declare @iTime DateTime
Set @iTime = '00:05:00';
If
(
Select COUNT(USERID)
From dbo.LogFile
)>= @TtlUsers
Begin
Insert Into dbo.ExpiredIdleUsersRmvd
Select Working, e.USERID, e.CMPNYNAM, USRCLASS, tTime, iTime, LoginDatestamp, GETDATE() As cTime
From dbo.ExpiredTime e Join inserted i on e.USERID = i.USERID
Where iTime >= @iTime;
End
7條記錄僅用於測試,實際值將> 35。我不想以35或更多的臨時用戶登錄。 dbo.ExpiredTime是一個視圖,iTime只是我從這個角度給這個領域的一個名字。實際時間來自sys表並稱爲ElapsedTime。 5分鐘僅用於測試實際時間將是2小時或更長時間。 – user1009629
好的。我仍然認爲你的問題在於你如何使用DateTime ......你顯然打算用這種比較來衡量已用時間,但它確實在比較兩個日期值......這可能是你的問題。 –
我真的很感謝你的幫助,我一直在爲此摔跤超過兩週。那麼,爲什麼這會在觸發器中給我一個問題,而不是存儲過程。有DateDiffs,但它們在視圖中.cTime只是記錄用戶從WMS中刪除的時間。是否可以快捷整個事情,只需觸發觸發存儲過程。我的目標是首先檢查有多少用戶,多長時間登錄,多長時間活動,然後在滿足適當條件時寫入表格。之後,第二個過程將觸發,將從選擇表中刪除這些用戶 – user1009629