什么是語句觸發器
是在表上或者某些情況下的視圖上執行的特定語句或者語句組上的觸發器。
能夠與INSERT、UPDATE、DELETE或者組合上進行關聯。但是無論使用什么樣的組合,各個語句觸發器都只會針對指定語句激活一次。
比如,無論update多少行,也只會調用一次update語句觸發器。 例子: 需要對在表上進行DML操作的用戶進行安全檢查,看是否具有合適的特權。
Create table foo(a number); Create trigger biud_foo Before insert or update or delete On foo Begin If user not in ('DONNY') then Raise_application_error(-20001, 'You don't have access to modify this table.'); End if; End; / 即使SYS,SYSTEM用戶也不能修改foo表 [試驗] 對修改表的時間、人物進行日志記錄。 1、 建立試驗表 create table employees_copy as select *from *ees 2、 建立日志表 create table employees_log( who varchar2(30), when date); 3、 在employees_copy表上建立語句觸發器,在觸發器中填充employees_log 表。
Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Begin Insert into employees_log( Who,when) Values( user, sysdate); End; / 4、 測試 update employees_copy set salary= salary*1.1; select *from employess_log; 5、 確定是哪個語句起作用? 即是INSERT/UPDATE/DELETE中的哪一個觸發了觸發器? 可以在觸發器中使用INSERTING / UPDATING / DELETING 條件謂詞,作判斷: begin if inserting then ----- elsif updating then ----- elsif deleting then ------ end if; end; if updating('COL1') or updating('COL2') then ------ end if; [試驗] 1、 修改日志表 alter table employees_log add (action varchar2(20)); 以上是我對于這個問題的解答,希望能夠幫到大家。
求觸發器語句
觸發器語句:
CREATE TRIGGER tri_stuscore ON stuscore
FOR UPDATE
AS
UPDATE stuscore SET *r=5 WHERE *r>5
go
這句話得出來的結果是當你更新時,它會相應地更新數據庫已有的scoyear>5的信息。
如果你想要當你數據更新完后,才更新數據庫已有的信息。要加AFTER
即:
CREATE TRIGGER tri_stuscore ON stuscore
AFTER UPDATE
AS
UPDATE stuscore SET *r=5 WHERE *r>5
go
這個得看數據庫是哪個版本的,sql2000和sql2005不大相同,雖然我都用過,但是忘記區別了,有些在sql2000可以的在sql2005不行。當然,mysql和sql也很不一樣,mysql的比較難建立。
SQL語句:寫一個觸發器
SQL Server用作業調度
作業的操作
企業管理器
--管理
--SQL Server代理
--右鍵作業
--新建作業
--"常規"項中輸入作業名稱
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"類型"中選擇"Transact-SQL 腳本(TSQL)"--插入的SQL腳本
--"數據庫"選擇執行命令的數據庫
--"命令"中輸入要執行的語句:
EXEC 存儲過程名 。 --該存儲過程用于創建表
--確定
--"調度"項
--新建調度
--"名稱"中輸入調度名稱
--"調度類型"中選擇你的作業執行安排
--如果選擇"反復出現"
--點"更改"來設置你的時間安排 每月25日
after語句觸發器
create or replace trigger emp_change
after insert or update or delete on emp
for each row
declare
cnt int;
begin
select count(*) into cnt from emp_change;
if cnt=0 then
insert into emp_change values(0,0,0,sysdate);
end if;
if inserting then
update emp_change set Ins=Ins+1;
elsif updating then
update emp_change set upd=upd+1;
elsif deleting then
update emp_change set del=del+1;
end if;
end;
SQL語句(觸發器)
--創建表的時候定義兩表級聯更新級聯刪除就好了 沒必要寫觸發器.
CREATE TABLE TEST1(
sid INT PRIMARY KEY,
sname VARCHAR(100)
)
CREATE TABLE TEST2(
id INT IDENTITY(1,1) PRIMARY KEY,
topic VARCHAR(50),
content VARCHAR(500),
sid INT,--定義外鍵屬性與主表TEST1相同
--定義外鍵并指定級聯更新級聯刪除約束
FOREIGN KEY(sid) REFERENCES TEST1(sid) ON UPDATE CASCADE --級聯刪除
ON DELETE CASCADE--級聯更新
)
--測試
INSERT INTO TEST1(sid,sname)VALUES(111,'AA')
INSERT INTO TEST2(topic,content,sid)VALUES('XXX','FAFASFA',111)
--查詢
SELECT * FROM TEST1
SELECT * FROM TEST2
--刪除
DELETE FROM TEST1 WHERE sid=111
--刪除演示環境
DROP TABLE TEST2
DROP TABLE TEST1
求SQL觸發器語句
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[部門信息](
[部門編號] [nchar](3) COLLATE Chinese_PRC_CI_AS NOT NULL,
[部門名稱] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[員工人數] [int] NOT NULL,
CONSTRAINT [PK_部門信息] PRIMARY KEY CLUSTERED
(
[部門編號] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[員工信息](
[員工編號] [nchar](4) COLLATE Chinese_PRC_CI_AS NOT NULL,
[員工姓名] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[性別] [nchar](2) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_員工信息_性別] DEFAULT (N'男'),
[出生年月] [datetime] NULL,
[入職時間] [datetime] NULL,
[部門編號] [nchar](3) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_員工信息] PRIMARY KEY CLUSTERED
(
[員工編號] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [Test]
GO
ALTER TABLE [dbo].[員工信息] WITH CHECK ADD CONSTRAINT [FK_員工信息_部門信息] FOREIGN KEY([部門編號])
REFERENCES [dbo].[部門信息] ([部門編號]
USE [Test]
ALTER TABLE [員工信息]
ADD CONSTRAINT CK_Employee_Sex CHECK (性別='男' or 性別='女' );
消息213,級別16,狀態1,第3 行
插入錯誤: 列名或所提供值的數目與表定義不匹配
use Test
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [uEmployee]
ON [dbo].[員工信息] AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE [員工信息]
SET 入職時間=getdate()
end
use Test
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [uEmployee]
ON [dbo].[員工信息] AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE [員工信息]
SET 入職時間=getdate()
end
sql語句的觸發器
CREATE trigger Can_borrowstudent on reader FOR UPDATE mssql是沒有if then end if 用if else 就可以了~!!~if (*_alreadyborrow='2') and (*_sort='學生')
(*orrowbook:= 0);
CREATE trigger Can_borrowstudent on reader FOR UPDATE as begin if (*_alreadyborrow='2') and (*_sort='學生') *orrowbook = 0
end試試上面 的 看提示哪里錯了~!!~!~