㈠ sql做一個觸發器,一個表中添加了一條信息,另一個表中的某個列值就加一,求代碼和解釋
createtriggerinsert_table--創建觸發器,觸發器名稱insert_table
ontablea--哪個表的觸發器
forinsert--哪個動作觸發
as
declare@avarchar(100)--定義一個參數
select@a=idfrominserted--取插入數據中的id
updatetablebsetn=n+1
where
--更新另一個表中相同ID的n
GO
createtriggerinsert_table--創建觸發器,觸發器名稱insert_table
ontablea--哪個表的觸發器
forinsert--哪個動作觸發
as
updatetablebsetn=n+1--無條件更新,只要tablea有insert操作,tableb的n就加一
GO
㈡ SQL觸發器中怎麼給變數賦值
declare @Cnumber int;----銷售商品的數量
declare @Cid varchar(50);----庫存裡面商品的ID
--給需要減少的商品的數量賦一個初始值,確保在重新賦值時不會出錯
SET @Cnumber = 0
--給商品的編號賦賦一個初始值
SET @Cid = '1'
--如果不賦個初始值,在從inserted中獲取並賦值時會出現值為NULL的情況
--獲取需要減少的商品的數量和商品的編號
SELECT @Cnumber = Cnumber,@Cid = Cid FROM inserted
--接下來的更新操作就是按照你原來的去更新就行了
update Commodity---商品庫存 set Cnumber=Cnumber-@Cnumber where Cid=@Cid
--也可以這樣更新
UPDATE Commodity SET Cnumber = Cnumber - Cnumber
FROM
Commodity AS T
INNER JOIN
inserted AS T1
ON
T.Cid = T1.Cid
--這樣可以批量更新,那麼針對一條數據進行更新是沒問題的,同事也省去了聲明變數一級變數賦值的步驟
㈢ 請問sql觸發器insert觸發器如何使用
DML觸發器有三類:
1, insert觸發器;
2, update觸發器;
3, delete觸發器;
觸發器的組成部分:
觸發器的聲明,指定觸發器定時,事件,表名以類型
觸發器的執行,PL/SQL塊或對過程的調用
觸發器的限制條件,通過where子句實現
類型:
應用程序觸發器,前台開發工具提供的;
資料庫觸發器,定義在資料庫內部由某種條件引發;分為:
DML觸發器;
資料庫級觸發器;
替代觸發器;
DML觸發器組件:
1,觸發器定時
2,觸發器事件
3,表名
4, 觸發器類型
5, When子句
6, 觸發器主體
可創建觸發器的對象:資料庫表,資料庫視圖,用戶模式,資料庫實例
創建DML觸發器:
Create [or replace] trigger [模式.]觸發器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 條件
PL/SQL塊
For each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;
When條件的出現說明了,在DML操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 後的條件不為真的時候,觸發器只是簡單地跳過了PL/SQL塊;
Insert觸發器的創建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
執行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表級觸發器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
運行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可見,表級觸發器在更新了多行的情況下,只觸發了一次;
㈣ sql觸發器插入數據
你這個是for insert 的,deleted 裡面是空 的,沒有集合跟inserted
對應,所以永遠是空的
直接寫就可以,不用判斷
INSERT INTO State SELECT Access_join_Name, Access_join_personnel, Access_join_site, Access_join_date, Access_join_card FROM inserted
㈤ SQL觸發器中怎麼插入與資料庫表中不重復的記錄
create
trigger
a1_a
on
[dbo].[a1]
for
insert
as
insert
into
b.dbo.b1(g,h,j)
select
c
as
g,d
as
h,e
as
j
from
inserted
在a資料庫a1表,加上面的觸發器(只限於同一台伺服器不通資料庫數據轉存),如果要在不同的伺服器上,就先在a所在伺服器上加鏈接伺服器,觸發器修改為:
create
trigger
a1_a
on
[dbo].[a1]
for
insert
as
insert
into
[server
name].b.dbo.b1(g,h,j)
select
c
as
g,d
as
h,e
as
j
from
inserted
㈥ SQL資料庫 觸發器實現多表同步插入
create TRIGGER [dbo].[tr_tb_erp_make_Pack_insert]
ON [dbo].[tb_erp_make_Pack]
FOR INSERT
AS
BEGIN
SET XACT_ABORT ON
SET NOCOUNT ON
declare @out_Flag int=0
declare @out_Rtn varchar(40)=''
declare @smsg nvarchar(400)
DECLARE @v_barCode VARCHAR(20)
DECLARE @v_cInvCode NVARCHAR(20)
DECLARE @v_packID INT
DECLARE @v_packDate DATETIME
DECLARE @v_userID INT
begin tran
DECLARE Cur CURSOR FOR
SELECT barCode,cInvCode,packID,packDate,userID FROM insertedOPEN Cur
FETCH NEXT FROM Cur INTO @v_barCode,@v_cInvCode,@v_packID,@v_packDate,@v_userIDWHILE @@FETCH_STATUS=0
BEGIN
SET @out_Flag = 0
SET @out_Rtn='添加成功!'
IF EXISTS(SELECT 1 FROM tb_erp_make_barCode WHERE barCode=@v_barCode)BEGIN
UPDATE dbo.tb_erp_make_barCode SET cInvCode=@v_cInvCode,packID=@v_packID,packDate=@v_packDate,vFlag=0 WHERE barCode=@v_barCodeIF @@error <> 0
BEGIN
SET @out_Flag=1
SET @out_Rtn='觸發器修改(UPDATE)錯誤!'
SET @smsg='錯誤:'+@out_Rtn
ROLLBACK TRAN
RAISERROR (@smsg,11,1)
RETURN
END
END
ELSE
BEGIN
INSERT INTO dbo.tb_erp_make_barCode
(
barCode ,packID ,packDate ,cInvCode
)
VALUES (
@v_barCode ,@v_packID ,GETDATE() ,@v_cInvCode)
IF @@error <> 0
BEGIN
SET @out_Flag=2
SET @out_Rtn='觸發器新增(INSERT)錯誤!'
SET @smsg='錯誤:'+@out_Rtn
ROLLBACK TRAN
RAISERROR (@smsg,11,1)
RETURN
END
END
FETCH NEXT FROM Cur INTO @v_barCode,@v_cInvCode,@v_packID,@v_packDate,@v_userIDEND
CLOSE Cur
DEALLOCATE Cur
COMMIT TRAN
RETURN