當前位置:首頁 » 編程語言 » sql執行觸發器語句

sql執行觸發器語句

發布時間: 2023-02-07 06:07:20

⑴ 求sql語句,觸發器的一些操作

(1)
alter atble S
drop constraints 完整性約束名
go
create trigger pksno on s for insert
as
declare @sno varchar(10)
select @sno=sno from inserted
if @sno is null
begin
print 'SNO不能為空'
rollback
end
if @sno in (select sno from s)
begin
print 'sno不可重復'
rollback
end
(2)
create trigger uc on c for update
as
declare @credit int
select @credit=credit from inserted
if @credit>6
begin
print '該項數據不能大於6'
rollback
end
這個是在SQL2000上實現的

⑵ SQL中,觸發器是什麼

1. 基本概念x0dx0a觸發器是特殊的存儲過程,基於一個表創建,主要作用就是實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據一致性。x0dx0a當觸發器所保護的數據發生變化(update,insert,delete)後,自動運行以保證數據的完整性和正確性。通俗的說:通過一個動作(update,insert,delete)調用一個存儲過程(觸發器)。x0dx0a2. 類型x0dx0a(1)DML觸發器x0dx0a在資料庫中發生數據操作語言(DML)事件時將啟用。DML 事件包括在指定表或視圖中修改數據的 INSERT 語句、UPDATE 語句或 DELETE 語句。DML 觸發器可以查詢其他表,還可以包含復雜的 T-SQL 語句。系統將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待,如果檢測到錯誤(例如,磁碟空間不足),則整個事務即自動回滾。x0dx0a(2)DDL 觸發器x0dx0aSQL Server 2005 的新增功能。當伺服器或資料庫中發生數據定義語言(DDL)事件時將調用這些觸發器。但與DML觸發器不同的是,它們不會為響應針對表或視圖的UPDATE、INSERT或DELETE語句而激發,相反,它們會為響應多種數據定義語言(DDL)語句而激發。這些語句主要是以CREATE、ALTER和DROP開頭的語句。DDL觸發器可用於管理任務,例如審核和控制資料庫操作。x0dx0a 創建DML觸發器x0dx0a1. 使用存儲過程模板創建存儲過程x0dx0a在【對象資源管理器】窗口中,展開「資料庫」節點,再展開所選擇的具體資料庫節點,再展開「表」節點,右擊要創建觸發器的「表」,選擇「新建觸發器」命令,如圖所示:x0dx0a在右側查詢編輯器中出現觸發器設計模板,用戶可以在此基礎上編輯觸發器,單擊「執行」按鈕,即可創建該觸發器。x0dx0ax0dx0a2. 使用T-SQL語句創建表x0dx0aCREATE TRIGGER 觸發器x0dx0aON 表名x0dx0aFOR[update,insert,delete ]x0dx0aAS SQL語句x0dx0a例9-6:創建基於表reader ,DELETE操作的觸發器。x0dx0aUSE Libraryx0dx0aGOx0dx0aIF EXISTS(SELECT name FROM sysobjectsx0dx0a WHERE name='reader_d' AND type='TR')x0dx0aDROP TRIGGER reader_d --如果已經存在觸發器reader_d則刪除x0dx0aGOx0dx0aCREATE TRIGGER reader_d --創建觸發器x0dx0aON reader --基於表 x0dx0aFOR DELETE --刪除事件x0dx0aASx0dx0aPRINT '數據被刪除!' --執行顯示輸出x0dx0aGOx0dx0a 試試吧!x0dx0a應用:x0dx0aUSE Libraryx0dx0aGOx0dx0aDELETE readerx0dx0awhere Rname='aaa'x0dx0a執行結果:x0dx0a數據被刪除!x0dx0a(所影響的行數為 1 行)x0dx0a例9-7:在表borrow中添加借閱信息記錄時,得到該書的應還日期。x0dx0a說明:在表borrow中增加一個應還日期SReturnDate。x0dx0aUSE Libraryx0dx0aIF EXISTS (SELECT name FROM sysobjectsx0dx0aWHERE name ='T_return_date' AND type='TR')x0dx0aDROP TRIGGER T_return_datex0dx0aGOx0dx0aCREATE TRIGGER T_return_date --創建觸發器x0dx0aON Borrow --基於表borrowx0dx0aAfter INSERT --插入操作x0dx0aASx0dx0a--查詢插入記錄INSERTED中讀者的類型x0dx0aDECLARE @type int,@dzbh char(10),@tsbh char(15)x0dx0aSET @dzbh=(SELECT RID FROM inserted)x0dx0aSET @tsbh=(SELECT BID FROM inserted)x0dx0aSELECT @type= TypeIDx0dx0aFROM readerx0dx0aWHERE RID=(SELECT RID FROM inserted)--副本x0dx0a/*把Borrow表中的應還日期改為x0dx0a當前日期加上各類讀者的借閱期限*/x0dx0aUPDATE Borrow SET SReturnDate=getdate()+x0dx0aCASE x0dx0a WHEN @type=1 THEN 90x0dx0a WHEN @type=2 THEN 60x0dx0a WHEN @type=3 THEN 30x0dx0aENDx0dx0aWHERE RID=@dzbh and BID=@tsbhx0dx0a應用:x0dx0aUSE Libraryx0dx0aINSERT INTO borrow(RID,BID) values(�','TP85-08')x0dx0a查看記錄:x0dx0a x0dx0a例9-8:在資料庫Library中,當讀者還書時,實際上要修改表brorrowinf中相應記錄還期列的值,請計算出是否過期。x0dx0aUSE Libraryx0dx0aIF EXISTS(SELECT name FROM sysobjectsx0dx0aWHERE name='T_fine_js' AND type='TR')x0dx0aDROP TRIGGER T_fine_jsx0dx0aGOx0dx0aCREATE TRIGGER T_fine_jsx0dx0aON borrowx0dx0aAfter UPDATEx0dx0aASx0dx0aDECLARE @days int,@dzbh char(10),@tsbh char(15)x0dx0aSET @dzbh=(select RID from inserted)x0dx0aSET @tsbh=(select BID from inserted)x0dx0aSELECT @days=DATEDIFF(day, ReturnDate, SReturnDate)x0dx0a--DATEDIFF函數返回兩個日期之差,單位為DAYx0dx0aFROM borrowx0dx0aWHERE RID=@dzbh and BID=@tsbhx0dx0aIF @days>0x0dx0a PRINT '沒有過期!'x0dx0aELSEx0dx0a PRINT '過期'+convert(char(6),@days)+'天'x0dx0aGOx0dx0a應用:x0dx0aUSE Libraryx0dx0aUPDATE borrow SET ReturnDate=񟭇-12-12'x0dx0aWHERE RID=�' and BID='TP85-08'x0dx0aGOx0dx0a執行結果:x0dx0a過期-157 天x0dx0a(1 行受影響)x0dx0a例9-9:對Library庫中Reader表的 DELETE操作定義觸發器。x0dx0aUSE Libraryx0dx0aGOx0dx0aIF EXISTS(SELECT name FROM sysobjectsx0dx0a WHERE name='reader_d' AND type='TR')x0dx0aDROP TRIGGER reader_dx0dx0aGOx0dx0aCREATE TRIGGER reader_dx0dx0aON Readerx0dx0aFOR DELETEx0dx0aASx0dx0aDECLARE @data_yj intx0dx0aSELECT @data_yj=Lendnumx0dx0aFROM deletedx0dx0aIF @data_yj>0x0dx0a BEGINx0dx0a PRINT '該讀者不能刪除!還有'+convert(char(2),@data_yj)+'本書沒還。x0dx0a ROLLBACKx0dx0a ENDx0dx0aELSEx0dx0a PRINT '該讀者已被刪除!'x0dx0aGOx0dx0a應用:x0dx0aUSE Libraryx0dx0aGOx0dx0aDELETE Reader WHERE RID=�'x0dx0a執行結果:x0dx0a該讀者不能刪除!還有4 本書沒還。x0dx0a 修改觸發器x0dx0aALTER TRIGGER 觸發器x0dx0a 刪除觸發器x0dx0aDROP TRIGGER 觸發器x0dx0a 查看觸發器x0dx0asp_helptext trigger_namex0dx0asp_helptrigger table_name

⑶ SQL觸發器語句

呵呵,看到你的這個問題了,回答一下,希望能給你增加印象。

由於SqlServer 沒有oracle中的行級觸發器的概念,觸發器如下:

create trigger [TC2]
on [dbo].[teacher]
for insert,update
as if (select salary from inserted)<3000
update teacher set salary=3000 and tid= (select tid from inserted)

說明:當你插入數據的時候,這條數據是存放在【inserted】表中的,在這個表中把【teacher】表的主鍵得到(假如是【tid】)然後把這個主鍵信息加到where 條件上,這樣就能起到只更新插入的那一條數據的效果了,否則會出現更新了全表的問題。

---
以上,希望對你有所幫助。

⑷ 求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 執行觸發器 執行語句不成功

你這個是FOR觸發器,在語句後面執行,inserted和ssss表中的數據已經是一樣的了,你下面兩句得到的結果都是修改後的值:


select@sname=name,@ssr=srfrominserted

select@ssr2=srfromsssswherename=@sname


改成:

createtriggercf_lzonssss
forinsert,update
as
declare@snamenvarchar(10),@ssrnvarchar(10),@ssr2nvarchar(10)
select@sname=name,@ssr=srfromdeleted
select@ssr2=srfromsssswherename=@sname
printlen(@ssr)
print@ssr
if(len(@ssr2)>0andlen(@ssr)>0)
begin
print1
rollbacktran--rollbacktran
end

⑹ sql腳本執行觸發器語句出錯 sould end with "/"

你應該是在.sh
腳本文件中使用
sql
語句吧
在腳本文件中執行命令行sql語句,換行時應該在每行語句後面使用
,語句結束使用分號。
給個例子:
select
*
from
table_name

where
id='xxx'

⑺ SQL 觸發器語句

create trigger checkRoysched
on roysched
INSTEAD OF INSERT --改成這個,這是在Insert之前的觸發。
as
if ((select title_id from roysched) is null) or
((select royalty from roysched) is null)
begin
print 'royalty,titlt_id欄位不能為空'
rollback transaction
end
go

熱點內容
網路訪問層 發布:2024-11-01 16:18:38 瀏覽:349
國產系列ftp 發布:2024-11-01 15:49:53 瀏覽:702
招編程師傅招聘 發布:2024-11-01 15:34:51 瀏覽:192
kkt編程 發布:2024-11-01 15:31:26 瀏覽:614
我的世界管理員進伺服器提示 發布:2024-11-01 15:21:12 瀏覽:126
如何刪除qq空間訪問記錄 發布:2024-11-01 15:20:07 瀏覽:323
微信上傳圖片失敗 發布:2024-11-01 15:19:53 瀏覽:117
python網站域名伺服器搭建 發布:2024-11-01 15:18:36 瀏覽:693
量產工具加密 發布:2024-11-01 15:14:31 瀏覽:674
儲備存儲 發布:2024-11-01 15:14:28 瀏覽:330