sql觸發器delete
『壹』 sql delete觸發器
你要讓所有的user_id都-1?還是+1?還有你的user_id是否是自增列
如果是自增列是不可以用update修改的
『貳』 SQL 2008 觸發器中UPDATE、DELETE
1.CREATE TRIGGER TEST1
ON A FOR UPDATE
AS
DECLARE @A,@B,@C,@D,@E,@F,@G
SELECT @B=B,....@G=G FROM INSERTED WHERE A=@A
UPDATE B SET A=@A,,,,G=@G,[KEY] = 2 WHERE @A=A
GO
2.CREATE TRIGGER TEST2
ON A FOR DELETE
AS
declare @A
SELECT @A = A FROM DELETED
UPDATE B SET [KEY] = 3
GO
第一個我不知道能不能完成你的功能 沒有測試
『叄』 在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表有數據(舊數據)
『肆』 sql觸發器for delete觸發器問題
---在表A上單獨為Delete創建一個觸發器
CREATETRIGGER[dbo].[trigger_A]
ON[dbo].A
AFTERDELETE
AS
BEGIN
……
END
或者
CREATETRIGGER[dbo].[trigger_A]
ON[dbo].A
FORDELETE
AS
BEGIN
……
END
『伍』 SQL觸發器同步刪除數據要怎麼寫
使用delete 觸發器格式:
CREATE trigger tri_update
on tablename
for delete
as
begin
--sql code
end
例:
CREATE trigger tri_update
on tablename1 --觸發的表名
for delete
as
begin
declare @del_id varchar(40)
select @del_id = id from deleted --tablename1 中刪除的數據保存在 deleted 中
delete tablename2 where id = @del_id --同步刪除tablename2中數據
end
『陸』 sql 觸發器 阻止多條delete
instead of 觸發器(針對一次刪除多條)
create trigger club_messages_delete
on club_messages
instead of delete
as
begin
delete from club_Reply where messagesID in (select messagesID from deleted)
delete from club_messages where messagesID in (select messagesID from deleted)
end
after 觸發器(針對多條)
create trigger club_messages_delete
on club_messages
after delete
as
begin
delete from club_Reply where messagesID in (select messagesID from deleted)
end
其實根據你的設計方案,我想根本就可以不用觸發器,一條留言只對應一條回復,這樣的話可以把留言ID作為留言回復的外鍵,把刪除規則設為層疊就可以了
『柒』 請問SQL觸發器使用Deleted為什麼沒有執行
把觸發器改一下,做成如下測試:
ALTER TRIGGER zkemp_udpate on zlemployee
after update
as
declare @state int,@i int
set @state=(select top 1 state from inserted)
if exists (select 1 from USERINFO where badgenumber=name
or empid in (select top 1 id from Deleted))
begin
print('有記錄')
end
-----------------------
然後執行update表,看看是否輸出 '有記錄'問題,沒有的話,說明沒有找到可以刪除的記錄,自然是不會執行了
『捌』 求解答sql中的delete觸發器賦值操作。。
不是這樣寫的,應該是
create trigger tri_還書
after delete on loan
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
begin
insert into loanhist values(:OLD.借閱證號,:OLD.借閱書號,:OLD.借閱日期,getdate());
end
大概是這樣的,如果不對,你可以改改試試
『玖』 關於sql delete和update的觸發器
因為你引入了inserted。在delete觸發器里,inserted永遠是空集。因此,三表連接後,也永遠是空集,即update語句永遠不會執行。
刪掉inserted,像這樣就可以了:
createtriggerp7
onp_form0000000006_mafterdelete
as
updatepsetp.amt_2-=d.amt_1from
p_form0000000006_mp,deleteddwherep.code>d.code;
『拾』 sql2000裡面,兩張表上的delete觸發器怎麼實現
建議使用存儲過程實現
A表,B表給你一個示例,具體情況你修改一下
兩個表必須有聯系,比如外鏈
create proc pro_delete
@ID int --要刪除信息的ID,A表的ID傳進來
as
begin
--該信息已經存在
if exists(select * from B表 where ID= @ID)
begin
--A表不做任何操作
urollback
end
--B表中沒有相關信息時 A表中的信息刪除
else
begin
delete * from A where ID=@ID
end
end
go
應該能解決你的問題了