У меня возникла небольшая проблема в моем SQL-запросе. Следующая ошибка:SQL SERVER - Истекло время ожидания. Период ожидания, прошедший до завершения операции, или сервер не отвечает
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
И вот мой SQL Query
ALTER PROC sp_savepresence
@Username char(20),
@Image text
AS
BEGIN
------------
DECLARE @PresStatus CHAR,
@DateDiff INT,
@ClockIn DATETIME,
@InsertData varchar(20) = 'TranSavePresence';
IF NOT EXISTS(SELECT Username FROM PresenceTransaction WHERE [email protected] AND ClockOut IS NULL)
BEGIN
BEGIN TRANSACTION @InsertData
INSERT INTO PresenceTransaction
(
Username,
[Image],
PresenceStatus,
WorkHour,
ClockIn,
ClockOut
)
VALUES
(
@Username,
@Image,
'N',
0,
getdate(),
NULL
)
END
ELSE
BEGIN
SELECT @ClockIn = ClockIn, @DateDiff = DateDiff(MINUTE, @ClockIn, getDate()) FROM PresenceTransaction WHERE [email protected] AND ClockOut IS NULL AND PresenceStatus = 'N'
IF @DateDiff IS NOT NULL
BEGIN
SELECT @PresStatus = 'P'
END
ELSE
BEGIN
SELECT @PresStatus='N'
END
UPDATE PresenceTransaction
SET
PresenceStatus = @PresStatus,
WorkHour = @DateDiff,
ClockOut = getDate()
WHERE [email protected] AND ClockOut IS NULL AND PresenceStatus = 'N'
END
------------
IF(@@Error <> 0)
BEGIN
PRINT @@Error
Rollback Tran @InsertData
SELECT @@Error AS [Status]
END
ELSE
BEGIN
COMMIT TRAN @InsertData
SELECT 'True' AS [Status]
END
END
GO
Я уже прочитал от некоторых статей через Интернет, и некоторые из статей, скажите мне настроить мой запрос. Но я не знаю, где точка ошибки или, возможно, тупиковая точка, и я не знаю, как настроить мой код запроса. Спасибо :)
Если вы хотите проверить наличие строки и, в зависимости от результата, выполнить некоторую другую работу, то все должно быть внутри одной транзакции. В противном случае строка может быть создана между проверенным временем и временем, когда вы пытаетесь вставить INSERT. – HABO