導航:首頁 > 編程大全 > mssql觸發器變數資料庫名

mssql觸發器變數資料庫名

發布時間:2022-12-27 03:44:48

1. 如何開發MSSQL 的SQL語句監視工具

以sqlserver2008為例,可以寫代碼查看,也可以通過SQLServerManagerStudio工具的樹形列表查看。一、代碼查看:直接在SQLServerManagerStudio查詢頁面寫語句:exec sp_helptext '觸發器名' ;二、樹形列表查看:1、用SQLServerManagerStudio登錄資料庫。2、依次點擊資料庫名——表——系統表——和觸發器相關的表名——觸發器。3、右鍵該觸發器名字,選擇「修改」。4、在右邊的頁面可看到觸發器源代碼。

2. MSSQL的觸發器問題~~~急!

1.用觸發器實現不了您的功能。
沒有用時間觸發的觸發器,這是曲解了觸發器的功能。
觸發器是在對表進行更新、插入、刪除操作時,由這些操作觸發的一段程序,用來進行一些相關的驗證和操作。
2.怎樣實現:
寫語句:
update user set status=0 where DATEDIFF(minute, AddTime, GETDATE()) > 20)and status=1
建作業:
在企業管理器中新建作業,將這個語句放到作業任務的,步驟中,然後調度作業每隔1分鍾或20分鍾執行一次就好了。
如果不會,建立作業,可以再提問題。

3. mssql2008怎麼刪除資料庫觸發器不是欄位表的

在table_1表所在的數據目錄下,可編程性,資料庫觸發器中。

如下圖所思:

4. MSSQL觸發器如何使用

use
database
name
Alter
Table
t
Disable
Trigger
ALL
(關閉觸發器)
insert
into
t
select
*
From
t2
(各類操作語句)
/*
delete
t
where......
*/
/*
update
t
set...
where...*/
Alter
Table
t
Enable
Trigger
ALL
(打開觸發器)
以上是在插入、更改、刪除數據之前把針對表T的觸發器關閉,操作表T的時候就不會再受觸發器的干擾了,等這些操作完成後再把觸發器打開。但是關閉觸發器之前,得考慮周全,確定後面的操作不會對數據產生影響.
因為觸發器能維持表之間的數據完整性和一致性,它的作用很重要.

5. sql觸發器問題

在SQL中,觸發器是一種特殊類型的存儲過程,它不同於SQL的存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如UPDATE、
INSERT、
DELETE
這些操作時,SQL
Server
就會自動執行觸發器所定義的SQL
語句,從而確保對數據的處理必須符合由這些SQL
語句所定義的規則。
觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還有其它許多不同的功能:
(1)強化約束(Enforce
restriction)
觸發器能夠實現比CHECK
語句更為復雜的約束。
(2)跟蹤變化(Auditing
changes)
觸發器可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。
(3)級聯運行(Cascaded
operation)。
觸發器可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。
(4)存儲過程的調用(Stored
procere
invocation)。
為了響應資料庫更新觸,發器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS(
資料庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在數據修改前後狀態發生的差異,並根據這種差異執行一定的處理。此外一個表的同一類型(INSERT、
UPDATE、
DELETE)的多個觸發器能夠對同一種數據操作採取多種不同的處理。
總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在資料庫設備上,而刪除表和插入表總是位於內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。
觸發器的種類
SQL
Server
2000
支持兩種類型的觸發器:AFTER
觸發器和INSTEAD
OF
觸發器。其中AFTER
觸發器即為SQL
Server
2000
版本以前所介紹的觸發器。該類型觸發器要求只有執行某一操作(INSERT
UPDATE
DELETE)
之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個觸發器。對於AFTER
觸發器,可以定義哪一個觸發器被最先觸發,哪一個被最後觸發,通常使用系統過程sp_settriggerorder
來完成此任務。
INSTEAD
OF
觸發器表示並不執行其所定義的操作(INSERT、
UPDATE、
DELETE),而僅是執行觸發器本身。既可在表上定義INSTEAD
OF
觸發器,也可以在視圖上定義INSTEAD
OF
觸發器,但對同一操作只能定義一個INSTEAD
OF觸發器。

6. SQL SERVER 寫一個觸發器 如果該表被修改則獲取修改表的計算機名和IP地址

在SQLServer上得到客戶端信息(操作的資料庫名,計算機名,用戶名,網卡物理地址,IP地址,程序名)
createprocp_getlinkinfo
@dbnamesysname=null,--要查詢的資料庫名,默認查詢所有資料庫的連接信息
@includeipbit=0--是否顯示IP地址,因為查詢IP地址比較費時,所以增加此控制
as
declare@dbidint
set@dbid=db_id(@dbname)
createtable#tb(idintidentity(1,1),dbnamesysname,hostnamenchar(128),loginnamenchar(128),net_addressnchar(12),net_ipnvarchar(15),prog_namenchar(128))
insertinto#tb(hostname,dbname,net_address,loginname,prog_name)
selectdistincthostname,db_name(dbid),net_address,loginame,program_namefrommaster..sysprocesses
wherehostname<>''and(@dbidisnullor)
if@includeip=0gotolb_show--如果不顯示IP地址,就直接顯示
declare@sqlvarchar(500),@hostnamenchar(128),@idint
createtable#ip(hostnamenchar(128),avarchar(200))
#tb
opentb
fetchnextfromtbinto@hostname
while@@fetch_status=0
begin
set@sql='ping'+@hostname+'-a-n1-l1'
insert#ip(a)execmaster..xp_cmdshell@sql
update#ipsetwherehostnameisnull
fetchnextfromtbinto@hostname
end
update#tbsetnet_ip=left(a,patindex('%:%',a)-1)
from#tnnerjoin(
selecthostname,a=substring(a,patindex('Pingstatisticsfor%:%',a)+20,20)from#ip
wherealike'Pingstatisticsfor%:%')bona.hostname=b.hostname
lb_show:
selectid,資料庫名=dbname,客戶機名=hostname,用戶名=loginname
,網卡物理地址=net_address,IP地址=net_ip,應用程序名稱=prog_namefrom#tb
GO

//顯示所有本機的連接信息:
execp_getlinkinfo
//顯示所有本機的連接信息,包含ip地址:
execp_getlinkinfo@includeip=1
//顯示連接指定資料庫的信息:
execp_getlinkinfo@dbname=表名,@includeip=1

7. MSSQL觸發器如何使用

舉個簡單例子說明,比如A、B兩個表,表結構完全一致,當插入數據到A的時候,需要同步把數據插入到B
Create trigger T_INSERT_B
On A
after insert
as
begin
insert into b select * from inserted
end

在觸發器使用中,可能會用到兩個表 inserted , deleted, 前者是存放本地操作中插入到表中的數據,後者是本次操作中刪除的數據,如果是update操作,那就在inserted表裡放的是更新後的記錄,deleted中存放更新前得數據
如果你想把插入的數據進行處理以後再插入另一個表,那可以從這兩個表中靈活讀取

8. 幫忙創建個MSSQL觸發器

首先,建立要用於s測試的 資料庫 與b 表。 create database a; create database b; use a create table table3(id int, val int); use b create table table3(id int, val int); 然後建觸發器 use a DELIMITER 。。 CREATE TRIGGER tr_Insert_t4 AFTER INSERT ON table7 FOR EACH ROW BEGIN -- 檢查當前 環境,避免遞歸。 IF @disable_trigger IS NULL THEN -- 設置禁用觸發器標志。 SET @disable_trigger = 1; -- 插入y目標表 INSERT INTO b。table4 VALUES (new。id, new。val); -- 恢復禁用觸發器標志。 SET @disable_trigger = NULL; END IF; END; 。。 DELIMITER ; use b DELIMITER 。。 CREATE TRIGGER tr_Insert_t7 AFTER INSERT ON table4 FOR EACH ROW BEGIN -- 檢查當前 環境,避免遞歸。 IF @disable_trigger IS NULL THEN -- 設置禁用觸發器標志。 SET @disable_trigger = 7; -- 插入n目標表 INSERT INTO a。table2 VALUES (new。id, new。val); -- 恢復禁用觸發器標志。 SET @disable_trigger = NULL; END IF; END; 。。 DELIMITER ; 測試執行效果: mysql> use b Database changed mysql> insert into table7 values(3,4); Query OK, 4 row affected (0。00 sec) mysql> use a Database changed mysql> insert into table4 values (5, 5); Query OK, 4 row affected (0。00 sec) mysql> select * from table6; +------+------+ | id | val | +------+------+ | 3 | 1 | | 2 | 1 | +------+------+ 3 rows in set (0。00 sec) mysql> select * from b。table6; +------+------+ | id | val | +------+------+ | 2 | 6 | | 6 | 1 | +------+------+ 8 rows in set (0。00 sec) gЧ椹gЧ椹k咖蔻癀洙xz紲laok咖蔻癀洙yⅩ

9. 請教如何使用SQL的觸發器 資料庫是MSSQLSERVER

當觸發INSERT觸發器時,新的數據行就會被插入到觸發器表和inserted表中。inserted表是一個邏輯表,它包含了已經插入的數據行的一個副本。inserted表包含了INSERT語句中已記錄的插入動作。inserted表還允許引用由初始化INSERT語句而產生的日誌數據。觸發器通過檢查inserted表來確定是否執行觸發器動作或如何執行它。inserted表中的行總是觸發器表中一行或多行的副本。

日誌記錄了所有修改數據的動作(INSERT、UPDATE和DELETE語句),但在事務日誌中的信息是不可讀的。然而,inserted表允許你引用由INSERT語句引起的日誌變化,這樣就可以將插入數據與發生的變化進行比較,來驗證它們或採取進一步的動作。也可以直接引用插入的數據,而不必將它們存儲到變數中。

示例

在本例中,將創建一個觸發器。無論何時訂購產品(無論何時向Order Details表中插入一條記錄),這個觸發器都將更新Procts表中的一列(UnitsInStock)。用原來的值減去訂購的數量值即為新值。

===========================================================
USE Northwind
CREATE TRIGGER OrdDet_Insert
ON [Order Details]
FOR INSERT
AS
UPDATE P SET
UnitsInStock = P.UnitsInStock – I.Quantity
FROM Procts AS P INNER JOIN Inserted AS I
ON P.ProctID = I.ProctID
===========================================================
DELETE觸發器的工作過程

當觸發DELETE觸發器後,從受影響的表中刪除的行將被放置到一個特殊的deleted表中。deleted表是一個邏輯表,它保留已被刪除數據行的一個副本。deleted表還允許引用由初始化DELETE語句產生的日誌數據。

使用DELETE觸發器時,需要考慮以下的事項和原則:

·當某行被添加到deleted表中時,它就不再存在於資料庫表中;因此,deleted表和資料庫表沒有相同的行。

·創建deleted表時,空間是從內存中分配的。deleted表總是被存儲在高速緩存中。

·為DELETE動作定義的觸發器並不執行TRUNCATE TABLE語句,原因在於日誌不記錄TRUNCATE TABLE語句。

示例

在本例中,將創建一個觸發器,無論何時刪除一個產品類別(即從Categories表中刪除一條記錄),該觸發器都會更新Procts表中的Discontinued列。所有受影響的產品都標記為1,標示不再使用這些產品了。

===========================================================
USE Northwind
CREATE TRIGGER Category_Delete
ON Categories
FOR DELETE
AS
UPDATE P SET Discontinued = 1
FROM Procts AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID
===========================================================
UPDATE觸發器的工作過程

可將UPDATE語句看成兩步操作:即捕獲數據前像(before image)的DELETE語句,和捕獲數據後像(after image)的INSERT語句。當在定義有觸發器的表上執行UPDATE語句時,原始行(前像)被移入到deleted表,更新行(後像)被移入到inserted表。

觸發器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執行觸發器動作。

可以使用IF UPDATE語句定義一個監視指定列的數據更新的觸發器。這樣,就可以讓觸發器容易的隔離出特定列的活動。當它檢測到指定列已經更新時,觸發器就會進一步執行適當的動作,例如發出錯誤信息指出該列不能更新,或者根據新的更新的列值執行一系列的動作語句。

語法
===========================================================
IF UPDATE (<column_name>)
===========================================================
例1

本例阻止用戶修改Employees表中的EmployeeID列。 www.aspxuexi.com

===========================================================
USE Northwind
GO
CREATE TRIGGER Employee_Update
ON Employees
FOR UPDATE
AS
IF UPDATE (EmployeeID)
BEGIN
RAISERROR ('Transaction cannot be processed.\
***** Employee ID number cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
END
===========================================================
INSTEAD OF觸發器的工作過程

可以在表或視圖上指定INSTEAD OF觸發器。執行這種觸發器就能夠替代原始的觸發動作。INSTEAD OF觸發器擴展了視圖更新的類型。對於每一種觸發動作(INSERT、UPDATE或 DELETE),每一個表或視圖只能有一個INSTEAD OF觸發器。

INSTEAD OF觸發器被用於更新那些沒有辦法通過正常方式更新的視圖。例如,通常不能在一個基於連接的視圖上進行DELETE操作。然而,可以編寫一個INSTEAD OF DELETE觸發器來實現刪除。上述觸發器可以訪問那些如果視圖是一個真正的表時已經被刪除的數據行。將被刪除的行存儲在一個名為deleted的工作表中,就像AFTER觸發器一樣。相似地,在UPDATE INSTEAD OF觸發器或者INSERT INSTEAD OF觸發器中,你可以訪問inserted表中的新行。

不能在帶有WITH CHECK OPTION定義的視圖中創建INSTEAD OF觸發器。

示例

在本例中,創建了一個德國客戶表和一個墨西哥客戶表。放置在視圖上的INSTEAD OF觸發器將把更新操作重新定向到適當的基表上。這時發生的插入是對CustomersGer表的插入而不是對視圖的插入。 www.aspxuexi.com

創建兩個包含客戶數據的表:
===========================================================

SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = 'Germany'
SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = 'Mexico'

GO
===========================================================

在該數據上創建視圖:
===========================================================

CREATE VIEW CustomersView AS
SELECT * FROM CustomersGer
UNION
SELECT * FROM CustomersMex
GO
===========================================================

創建一個在上述視圖上的INSTEAD OF觸發器:

===========================================================

CREATE TRIGGER Customers_Update2

ON CustomersView

INSTEAD OF UPDATE AS

DECLARE @Country nvarchar(15)

SET @Country = (SELECT Country FROM Inserted)

IF @Country = 'Germany'

BEGIN

UPDATE CustomersGer

SET CustomersGer.Phone = Inserted.Phone

FROM CustomersGer JOIN Inserted

ON CustomersGer.CustomerID = Inserted.CustomerID

END

ELSE

IF @Country = 'Mexico'

BEGIN

UPDATE CustomersMex

SET CustomersMex.Phone = Inserted.Phone

FROM CustomersMex JOIN Inserted

ON CustomersMex.CustomerID = Inserted.CustomerID

END
===========================================================
通過更新視圖,測試觸發器:
===========================================================
UPDATE CustomersView SET Phone = ' 030-007xxxx'
WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersView
WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersGer www.aspxuexi.com
WHERE CustomerID = 'ALFKI'
===========================================================
那麼具體的講,對於多列數據,如何計算方差呢?:
===========================================================
CREATE TRIGGER [calT1T2T3] ON dbo.DCLB
FOR INSERT,UPDATE
AS
update P
SET
/**//*
計算方差的觸發器
*/
P.T1=(I.P1+I.P2+I.P3+I.P4+I.P5+I.P6),
P.T2=(I.Y1+I.Y2+I.Y3+I.Y4+I.Y5+I.Y6 ), www.aspxuexi.com
P.T3=SQRT(P.T1*P.T1+P.T2*P.T2)

FROM DCLB AS P INNER JOIN Inserted AS I
ON P.SID = I.SID
===========================================================
觸發器的使用很方便,而且也很簡單,重要的是理解inserted過程。可將UPDATE語句看成兩步操作:即捕獲數據前像(before image)的DELETE語句,和捕獲數據後像(after image)的INSERT語句。當在定義有觸發器的表上執行UPDATE語句時,原始行(前像)被移入到deleted表,更新行(後像)被移入到inserted表。觸發器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執行觸發器動作。

10. MSSQL觸發器如何使用

觸發器是一種特殊的存儲過程,類似於其它編程語言中的事件函數,SQL Server? 允許為 INSERT、UPDATE、DELETE 創建觸發器,當在表(視圖)中插入、更新、刪除記錄時,觸發一個或一系列 T-SQL 語句。
本專題的目的並非是向您詳盡地介紹觸發器,而是系統地向您介紹觸發器的常用知識與相關應用,並與您一起探討應用經驗,如果您需要了解觸發器不常用的知識點,請參見 SQL Server? 聯機叢書(安裝 SQL Server? 時默認是安裝的)。
a.基礎-創建一個簡單的觸發器
觸發器是一種特殊的存儲過程,類似於事件函數,SQL Server? 允許為 INSERT、UPDATE、DELETE 創建觸發器,即當在表中插入、更新、刪除記錄時,觸發一個或一系列 T-SQL語句。
觸發器可以在查詢分析器里創建,也可以在表名上點右鍵->「所有任務」->「管理觸發器」來創建,不過都是要寫 T-SQL 語句的,只是在查詢分析器里要先確定當前操作的資料庫。
創建觸發器用 CREATE TRIGGER
CREATE TRIGGER 觸發器名稱
ON 表名
FOR INSERT、UPDATE 或 DELETE
AS
T-SQL 語句
注意:觸發器名稱是不加引號的。
如下是聯機叢書上的一個示例,當在 titles 表上更改記錄時,發送郵件通知 MaryM。
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
b.基礎-刪除觸發器
用查詢分析器刪除
在查詢分析器中使用 drop trigger 觸發器名稱 來刪除觸發器。
也可以同時刪除多個觸發器:drop trigger 觸發器名稱,觸發器名稱...
注意:觸發器名稱是不加引號的。在刪除觸發器之前可以先看一下觸發器是否存在:
if Exists(select name from sysobjects where name=觸發器名稱 and xtype='TR')
用企業管理器刪除
在企業管理器中,在表上點右鍵->「所有任務」->「管理觸發器」,選中所要刪除的觸發器,然後點擊「刪除」。
c.基礎-重命名觸發器 ......

閱讀全文

與mssql觸發器變數資料庫名相關的資料

熱點內容
蘋果有沒有種子搜索器 瀏覽:17
u盤怎麼注冊文件夾 瀏覽:151
c盤可以刪除哪個文件夾 瀏覽:871
java手機版編程軟體 瀏覽:606
如何加速訪問國外伺服器的網站 瀏覽:194
體系文件優化應該哪個部門負責 瀏覽:893
球球app換成什麼了 瀏覽:974
flm文件名 瀏覽:48
dota怎麼調全屏win10 瀏覽:826
中國區縣資料庫 瀏覽:676
excel怎麼把文件導入到表格上 瀏覽:754
河北省委文件PDF 瀏覽:482
數據線怎麼變軟 瀏覽:949
java做app需要學什麼 瀏覽:736
圖元文件怎樣插入word 瀏覽:346
word表格消除粘貼的表格背景色 瀏覽:438
文件路徑怎麼改為絕對路徑 瀏覽:537
park視頻文件用什麼軟體打開 瀏覽:288
access資料庫怎麼設置數據表欄位 瀏覽:622
ps工具圖標 瀏覽:938

友情鏈接