當前位置:首頁 » 編程語言 » sql觸發器判斷

sql觸發器判斷

發布時間: 2022-10-25 23:52:14

㈠ mssql觸發器判斷語句

你的問題還是沒有描述清楚,那就先回答我的問題:
1,AID、BID、CID是不是按照序列方式遞增的,如:1,2,3, ............
2,AID、CID列的數據是不是提前已經寫好的?
3,從外部輸入的參數(新增數據)是不是只有一個參數被插入到USER表的BID列?
4,按照我的理解你是有兩個表是么,一個原表,一個新表?

㈡ 在Sql Server觸發器中判斷操作是Insert還是Update還是Delete

DECLARE
@IsInsert bit,
@IsUpdate bit,
@IsDelete bit
IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
SET @IsInsert = 1
ELSE
SET @IsInsert = 0
IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
SET @IsUpdate = 1
ELSE
SET @IsUpdate = 0
IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
SET @IsDelete = 1
ELSE
SET @IsDelete = 0
create trigger Update_Del on Table
for update,delete
as
if not exists(select 1 from inserted)
begin /*inserted表無記錄,是刪除*/
end
else
begin /*是更新*/ end
go
關鍵在於Inserted表
觸發器語句中使用了兩種特殊的表:deleted
表和 inserted 表。
Deleted
表用於存儲 DELETE 和 UPDATE 語句所影響的行的復本。在執行 DELETE 或 UPDATE 語句時,行從觸發器表中刪除,並傳輸到 deleted
表中。Deleted 表和觸發器表通常沒有相同的行。
Inserted
表用於存儲 INSERT 和 UPDATE 語句所影響的行的副本。在一個插入或更新事務處理中,新建行被同時添加到 inserted
表和觸發器表中。Inserted 表中的行是觸發器表中新行的副本。
1.插入操作(Insert)

Inserted表有數據,Deleted表無數據
2.刪除操作(Delete)

Inserted表無數據,Deleted表有數據
3.更新操作(Update)

Inserted表有數據(新數據),Deleted表有數據(舊數據)

㈢ mssql 觸發器中使用判斷

if (object_id('tr_insert', 'TR') is not null)
drop trigger tr_insert
GO
CREATE TRIGGER tr_insert
ON user
FOR insert
AS
DECLARE @AID, @BID, @CID INT;
SELECT @AID=AID,@BID=BID FROM INSERTED
IF EXISTS(SELECT 1 FROM user WHERE AID = @BID)
BEGIN
SELECT @CID=CID FROM user(UPDLOCK) WHERE AID = @BID
INSERT INTO user VALUES(@AID,@BID,@CID);
END
GO

㈣ SQL觸發器判斷總是為假

createtriggertri_InsertStudy
onStudyCourse_Table
forinsert--插入觸發
as
begin
--定義變數
declare@idvarchar(10),@StuIDint,@TeaIDint,@CourseIDint,@tempvarchar(10),@countSumint;
--變數賦值
select@id=StudyID,@StuID=StuID,@TeaID=TeaID,@CourseID=CourseIDfrominserted;
select@countSum=count(StudyID)fromStudyCourse_TablewhereStudyID=@id;
if@idisnull
begin
select@id=left(newid(),10);
select2;
insertintoStudyCourse_Table(StudyID,StuID,TeaID,CourseID)values(@id,@StuID,@TeaID,@CourseID)
end
else
begin
if@countSum>1
begin
select3;
select@temp=left(newid(),10);
updateStudyCourse_TablesetStudyID=@temp,StuID=@StuID,TeaID=@TeaID,@CourseID=CourseID
whereStudyID=@idandStuID=@StuIDandTeaID=@TeaIDand@CourseID=CourseID;
end
else
begin
select1;
end
end
end
/*
上面是修改過的
上面的觸發器存在問題,就是一次插入多條記錄時,肯定會有問題,因為inserted本身是個結果集,除非你能保證這個表的數據都是一條一條的插入,而不是批量插入
批量插入的話需要另外一種寫法。因為對你業務不了解,無法幫到你。
*/

㈤ 如何看sql 中的觸發器觸發了什麼

1)查看錶中的觸發器類型:
sp_helptrigger:返回對當前資料庫的指定表定義的 DML 觸發器的類型。sp_helptrigger 不能用於 DDL 觸發器。
示例: EXEC sp_helptrigger '表名'

2)查看觸發器的有關信息:
sp_help:報告有關資料庫對象(sys.sysobjects 兼容視圖中列出的所有對象)、用戶定義數據類型或某種數據類型的信息。
示例: EXEC sp_help '觸發器名'

3)顯示觸發器的定義:
sp_helptext:顯示規則、默認值、未加密的存儲過程、用戶定義函數、觸發器或視圖的文本。
示例: EXEC sp_helptext '觸發器名'

4)查看當前庫中所有的觸發器:
查詢腳本:SELECT * FROM Sysobjects WHERE xtype = 'TR'

5)查看當前庫中所有的觸發器和與之相對應的表:
查詢腳本:SELECT tb2.name AS tableName,tb1.name AS triggerName FROM Sysobjects tb1 JOIN Sysobjects tb2 ON tb1.parent_obj=tb2.id WHERE tb1.type='TR'

熱點內容
如何用cmd打開伺服器管理器 發布:2025-01-06 05:44:40 瀏覽:436
我的世界國際服一進伺服器就崩 發布:2025-01-06 05:30:53 瀏覽:395
雲主機網站源碼 發布:2025-01-06 05:30:40 瀏覽:88
整數指數冪的運演算法則 發布:2025-01-06 05:22:32 瀏覽:362
php數據緩存技術 發布:2025-01-06 05:22:24 瀏覽:516
jdk卸載linux 發布:2025-01-06 05:21:48 瀏覽:665
昂克賽拉哪個配置最走量 發布:2025-01-06 05:13:03 瀏覽:425
稅務uk密碼是什麼密碼 發布:2025-01-06 05:10:45 瀏覽:41
羅蘭音響什麼配置較好 發布:2025-01-06 05:09:17 瀏覽:794
怎麼查看伺服器是虛擬還是實體機 發布:2025-01-06 05:09:16 瀏覽:46