[英]SQL Server IF NOT EXISTS Usage?
好的,所以我的架構是這樣的:
表:Timesheet_Hours
列:
這是該表的極其簡化的版本,但將用於本說明的目的。 假設一個人只能有一個時間表記錄。
我想要做的是將記錄添加到另一個名為 WorkLog 的表中。 這里的每條記錄都有一個與之相關的時間。 當該表更新時,我也想更新 Timesheet_Hours。
在我更新 Timesheet_Hours 之前,我想首先檢查相關的 Timesheets 是否尚未發布,然后我想首先檢查是否確實有要更新的記錄。
if 語句的第一部分用於檢查時間表是否尚未發布,工作正常。 問題是第二部分。 它正在檢查要更新的記錄是否已經存在。 問題是它總是會引發錯誤。
注意:下面的代碼是從 WorkLog 表上的更新、插入和刪除觸發器運行的存儲過程中提取的。 @PersonID 是該表的參數之一。 如果我注釋掉該語句的第二部分,存儲過程就可以正常工作。
IF EXISTS
(
SELECT 1
FROM Timesheet_Hours
WHERE Posted_Flag = 1
AND Staff_Id = @PersonID
)
BEGIN
RAISERROR('Timesheets have already been posted!', 16, 1)
ROLLBACK TRAN
END
ELSE
IF NOT EXISTS
(
SELECT 1
FROM Timesheet_Hours
WHERE Staff_Id = @PersonID
)
BEGIN
RAISERROR('Default list has not been loaded!', 16, 1)
ROLLBACK TRAN
END
您是否驗證過實際上有一行 Staff_Id = @PersonID? 假設該行存在,您發布的內容在測試腳本中運行良好。 如果注釋掉插入語句,則會引發錯誤。
set nocount on
create table Timesheet_Hours (Staff_Id int, BookedHours int, Posted_Flag bit)
insert into Timesheet_Hours (Staff_Id, BookedHours, Posted_Flag) values (1, 5.5, 0)
declare @PersonID int
set @PersonID = 1
IF EXISTS
(
SELECT 1
FROM Timesheet_Hours
WHERE Posted_Flag = 1
AND Staff_Id = @PersonID
)
BEGIN
RAISERROR('Timesheets have already been posted!', 16, 1)
ROLLBACK TRAN
END
ELSE
IF NOT EXISTS
(
SELECT 1
FROM Timesheet_Hours
WHERE Staff_Id = @PersonID
)
BEGIN
RAISERROR('Default list has not been loaded!', 16, 1)
ROLLBACK TRAN
END
ELSE
print 'No problems here'
drop table Timesheet_Hours
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.