事前に感謝します
テーブルに行を挿入する非常に基本的なストアド プロシージャがあります。今日まで問題なく動作していました
ここにスクリプトがあります
(
@emp varchar(16),
@logdate date,
@logtime time,
@term char(20),
@SSID char(16)
)
AS
INSERT INTO AccessLog (EmployeeID, LogDate, LogTime, TerminalID, InOut, ChangedBy)
VALUES (@emp, @logdate, @logtime, @term, 3, @SSID)
5118 の文字列が渡されると、挿入は失敗します。この挿入が終了した後に起動するトリガーがいくつかあります。
ここが奇妙な部分です。変数に別の数値を渡すと@emp
問題なく動作しますが、5118 を渡すと失敗します。
私が受け取るエラーは以下のとおりです。
メッセージ 241、レベル 16、状態 1、プロシージャ UpdateTimeWorked、行 27
文字列から日付や時刻を変換するときに変換に失敗しました。
失敗している手順は次のとおりです。強調表示されている行は行 27 です。
TRIGGER [dbo].[UpdateTimeWorked] ON [dbo].[TimeLog]
FOR UPDATE
AS
SET NOCOUNT ON
DECLARE @ID int;
DECLARE @RCDIDIN int;
DECLARE @RCDIDOUT int;
DECLARE @ComboIn datetime;
DECLARE @ComboOut datetime;
SELECT @ID = ID FROM INSERTED;
SELECT @ComboIn = LoginCombo FROM INSERTED;
SELECT @ComboOut = LogoutCombo FROM INSERTED;
SELECT @RCDIDIN = RCDIDIN FROM INSERTED;
SELECT @RCDIDOUT = RCDIDOUT FROM INSERTED;
**IF ( UPDATE(LogoutCombo))**
BEGIN
IF (@RCDIDOUT != 0)
BEGIN
UPDATE TimeLog
SET LogOutRND = (select CAST(dbo.roundtime(LogOutRND,0.25) AS TIME))
WHERE ID = @ID
UPDATE TimeLog
SET LogOutComboRND = CAST(CAST(LogOutDate AS DATE) AS SMALLDATETIME) + CAST(LogOutRND AS TIME)
WHERE ID = @ID
UPDATE TimeLog
SET TimeWorked = dbo.gettime(DATEDIFF(ss,LogInComboRND,LogoutComboRND))
WHERE ID = @ID AND LogInEntered = 1 AND LogOutEntered = 1
UPDATE TimeLog
SET TimeWorked = (select CAST(dbo.roundtime(TimeWorked,0.25) AS TIME)), Rounded = 1
WHERE ID = @ID AND LogInEntered = 1 AND LogOutEntered = 1
END
END
IF ( UPDATE(LoginCombo))
BEGIN
IF (@RCDIDIN != 0)
BEGIN
UPDATE TimeLog
SET LogInRND = (select CAST(dbo.roundtime(LogInRND,0.25) AS TIME))
WHERE ID = @ID
UPDATE TimeLog
SET LogInComboRND = CAST(CAST(LogInDate AS DATE) AS SMALLDATETIME) + CAST(LogInRND AS TIME)
WHERE ID = @ID
UPDATE TimeLog
SET TimeWorked = dbo.gettime(DATEDIFF(ss,LogInComboRND,LogoutComboRND))
WHERE ID = @ID AND LogInEntered = 1 AND LogOutEntered = 1
UPDATE TimeLog
SET TimeWorked = (select CAST(dbo.roundtime(TimeWorked,0.25) AS TIME)), Rounded = 1
WHERE ID = @ID AND LogInEntered = 1 AND LogOutEntered = 1
END
END
GO
なぜこれが機能しないのか、私は完全に空白です。
誰にもアイデアはありますか?
私が述べたように、@emp の他のエントリを渡すと、正常に実行されます。「5118」を渡すこともできますが、機能しますが、5118 は機能しません。