當前位置:首頁 » 編程語言 » sql觸發器執行存儲過程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql觸發器執行存儲過程

發布時間: 2023-05-15 07:45:28

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觸發器。

Ⅱ SQL里中存儲過程和觸發器,如何創建

  1. 觸發器是一種特殊的存儲過程,
    2.觸發器是在對表進行插入、更新或刪除操作時自動執行的存儲過程
    3.觸發器通常用於強制業務規則
    4.觸發器是一種高級約束,可以定義比用CHECK 約束更為復雜的約束
    5.可執行復雜的SQL語句(if/while/case)

  2. DELETE 觸發器
    INSERT 觸發器
    UPDATE 觸發器

  3. /*----------Insert 插入 觸發器------------*/
    Create Trigger Tri_insert
    on students /*針對某個表,觸發器是建立在表關繫上的*/
    for insert /*採用的是哪種觸發器*/
    as
    declare @stu_id int;
    declare @stu_score varchar(200);
    select @stu_id=s_id from inserted /*這里的Inserted 是在創建觸發器時候 系統自動創建的內存表*/
    insert into student_Score(s_id,ss_score)values(@stu_id,'100')

  4. go
    --就是插一條數據進入students中,Tri_insert觸發器就會自動在student_Score插入相關的學生的一條分數的數據
    insert into students(s_name,s_classId) values('黃馳',6)

  5. select * from student_Score

Ⅲ asp sql2000 事務 觸發器 存儲過程

你說的那些是T-SQL語言,是操作資料庫的,是在資料庫里啟虛正的查詢分析器里寫的。
常見T-SQL語句有:
1)變數定義語句:declare
2)數據定義譽鎮語句:create、alter、drop
3)數據操縱語句:select、insert、update、delete
4)數據控悄悔制語句:grant、deny、revoke
5)流程式控制制語句:if、case、while
比如:創建存儲過程
create
procere
storedproc
as
select
*
from
orders
執行:exec
storedproc
比如:觸發器
create
trigger
newtrigger
on
orders
for
delete
as
print
'訂單號碼已被更改,觸發器起到作用!'

Ⅳ 如何在oracle 觸發器中執行mssql資料庫中的存儲過程的相關推薦

1:什麼叫存儲過程?
在oracle中,可以在資料庫中定義子程序,這種程序塊叫存儲過程(procere),它存放在數據字典中,可以在不同用戶和應用程序中共享,並可以實現程序的優化和重用。

2:存儲過程的有點?
 過程運行在伺服器端,執行速度快
 過程執行一次後代碼就駐留在高速緩存中,在以後的操作中,直接調用緩存數據。
 確保資料庫的安全性,可以不授權用戶直接訪問應用程序中的一些表,而是授權用戶執咐舉行訪問資料庫的過程。
 自動完成需要預先執行的任務,過程可以在系統啟動時自動運行。、

3:存儲過程的創建和執行
用戶存儲過程只能定義在當前資料庫中,可以使用sql語句或OEM創建。
默認情況下,用戶創建的存儲過程歸登錄資料庫的用戶所擁有,DBA可以把許可授權給其他用戶。
Sql命令創建存儲過程
CREATE procere 過程名
【(parameter parameter_mode date_type,….n)】
IS| AS
BEGIN
SQL_STATEMENT
END 過程名
其中
Parameter表示過程的參數。
parameter_mode:參數的類型,過程參數和函數參數一樣,有三種類型IN,OUT,IN OUT
IN 表示參數是輸入給過程的。
OUT表示採納數載過程中被賦值,可以傳給過程的外部。
IN OUT表示可以傳內,可以傳外。

調用存儲過程
直接輸入存儲過程的名字可以執行一個已經定義的存儲過程。

存儲過程的編輯修改
修改虛簡衫存儲過程雖然可以和修改視圖一樣,用ALTER procere,但是他是用來重新編譯和驗證用的,如果要修改過程定義,建議還是用create or replace。

存儲過程的刪除
當某個過程不再需要的時候,應該將其從內存中刪除,以釋放它佔用的資源。
Drop procere 存儲過程名。
Drop procere update_info.

觸發器
觸發器(trigger)是一些過程,與表聯系緊密,用於保護表中的數據,當一個基表被修改時,觸發器自動就會執行。例如出入其可以實現多個表間數據的一致性和完整性。
一般情況下,對表數據的操作有增刪查改,維護數據的觸發器也可以分為多種,每張基表最多可以建立12個觸發器。
1:Before insert 2:before insert fo each row; 3:after inert
4:after insert for each row 5:before update 6:before update for each row
7:after update 8:after update for each row; 9:before delete;
10:before delete for each row 11:after delete 12:after delete for each row.

利用sql語句創建觸發器
語法規則
Create or replace trigger 觸發器名
{before| after| instead of}
{delete 【or insert】【or update】【of column ….n 】}
On 表名|視圖名
【for each row 】[]where condition]]
Sql_statement[,,,n]

參數說明
Instead of :指定在創差腔建替代觸發器。
Of column 指定在哪些列上進行觸發。。。
創建觸發器的限制
1:觸發器中有效的語句可以包括DML語句,但是不能包括DDL,rollback,commit
,savepoint都不適用。

Ⅳ sql server中觸發器和存儲過程的概念和作用,能不能寫的明白一點,易懂一點

1,觸發器。其實也是一些sql語句。可以設定什麼時正賣候觸發這些sql語句執行。比如,當資料庫里有插入insert,update等動作的時候,讓觸發器的纖螞sql語句執行,這些sql語句可以插入,修改某個表。

2,存儲過程。也是一些sql語句集合,包含表達式,控制流程,舉豎逗比較接近程序語言了,比如,有if判斷語句,可以聲明變數,可以初始化變數,可以接受參數。

Ⅵ SQL Server 2000 觸發器 存儲過程 急需!!!!!!

--這是存儲過程的創建
-- Create a procere that takes one input parameter
-- and returns one output parameter and a return code.
CREATE PROCEDURE SampleProcere @EmployeeIDParm INT,
@MaxTotal INT OUTPUT
AS
-- Declare and initialize a variable to hold @@ERROR.
DECLARE @ErrorSave INT
SET @ErrorSave = 0

-- Do a SELECT using the input parameter.
SELECT FirstName, LastName, JobTitle
FROM HumanResources.vEmployee
WHERE EmployeeID = @EmployeeIDParm

-- Save any nonzero @@ERROR value.
IF (@@ERROR <> 0)
SET @ErrorSave = @@ERROR

-- Set a value in the output parameter.
SELECT @MaxTotal = MAX(TotalDue)
FROM Sales.SalesOrderHeader;

IF (@@ERROR <> 0)
SET @ErrorSave = @@ERROR

-- Returns 0 if neither SELECT statement had
-- an error; otherwise, returns the last error.
RETURN @ErrorSave
GO

--下面是執行過程

-- Declare the variables for the return code and output parameter.
DECLARE @ReturnCode INT
DECLARE @MaxTotalVariable INT

-- Execute the stored procere and specify which variables
-- are to receive the output parameter and return code values.
EXEC @ReturnCode = SampleProcere @EmployeeIDParm = 19,
@MaxTotal = @MaxTotalVariable OUTPUT

-- Show the values returned.
PRINT ' '
PRINT 'Return code = ' + CAST(@ReturnCode AS CHAR(10))
PRINT 'Maximum Quantity = ' + CAST(@MaxTotalVariable AS CHAR(10))
GO

--觸發器
--使用包含提醒消息的頌敬 DML 觸喚櫻仔發器
--如果有人試圖在 Customer 表中添加或更改數據,下列 DML 觸發器將和汪向客戶---端顯示一條消息。

USE AdventureWorks;
GO
IF OBJECT_ID ('Sales.reminder1', 'TR') IS NOT NULL
DROP TRIGGER Sales.reminder1;
GO
CREATE TRIGGER reminder1
ON Sales.Customer
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Customer Relations', 16, 10);
GO

Ⅶ SQL怎麼在存儲過程或觸發器中使用循環語句

這個觸發器是更新的時候操作;
表記錄的update實際上執行的是先delete後insert;
所以,如果要將觸發器裡面的sql代碼提取出來可以單獨執行的話,需要知道參數,可以把參數寫成存儲過程的參數,同時還需要留意觸發器中的特定執行條件,比如說當update某個欄位時才執行觸發器,這個條件也要考慮到存儲過程的sql邏輯中。
以上幾點建議僅供參考。

Ⅷ sql中的觸發器與存儲過程有什麼相同點和不同點希望能專業點,謝謝

一、功能不同:

1、存儲過程的功能:

(1) 變數說明

(2) ANSI(美國國家標准化組織)兼容的SQL命令(如Select,Update….)

(3) 一般流程式控制制命令(if…else…、while….)

2、觸發器的功能:

(1)強化約束(Enforce

restriction)

(2)跟蹤變化Auditing

changes

(3)級聯運行(Cascaded

operation)

二、指代不同

存儲過程:在大型資料庫系統中,一組為了完成特定功能的SQL語句集。

觸發器:SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法。

三、作用不同:

1、存儲過程:局時存儲過程,以兩皮隱個井字型大小(##)號開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,全局臨時存儲過程一旦創建,以後連接到伺服器的任意用戶都可以執行它,而且不需要特定的許可權。

2、觸發器:可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。

四、相同點:

觸發器是自動的:它們在對表的數據作了任何清握罩修改(比如手工輸入或者應用程序採取的操作)之後立即被激活。

觸發器可以通過資料庫中的相關表進行層疊更改。例如,可以在 titles 表的 title_id 列上寫入一個刪除觸發器,以使其它表中的各匹配行採取刪除操作。該觸發器用 title_id 列作為唯一鍵,在 titleauthor、sales 及 roysched 表中對各匹配行進行定位。

觸發器可以強制限制,這些限制比用 CHECK 約束所定義的更復雜。與 CHECK 約束不同的是,觸發器可以引用其它表中的列。

(8)sql觸發器執行存儲過程擴展閱讀:

觸發器可通過資料庫中的相關表實現級聯更改;通過級聯引用完整性約束可以更有效地執行這些更改。觸答鬧發器可以強制用比 CHECK 約束定義的約束更為復雜的約束。與CHECK約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。

觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。

Ⅸ 如何在 SQLAlchemy 中定義觸發器,存儲過程

使用 動態 SQL, 好像是可以處理。

1> CREATE procere fpinput_proc
2>搜余 AS
3> BEGIN
4>
5> DECLARE @sql VARCHAR(MAX);
6> SET @sql =
7> 'CREATE TRIGGER AfterDeleteVIP '
8> + ' ON VIP '
9> + ' FOR DELETE '
10> + 'AS '
11> + 'BEGIN '
12> + ' DELETE FROM VB '
13> + ' WHERE '
14> + ' V_No IN (SELECT V_NO FROM deleted); '
15> + 'END; '
16>
17> EXECUTE (@sql);
18> END;
19> go

1> begin
2> exec fpinput_proc;
3> end
4> go

1> select
2> tri.name AS TriggerName
3> from
4> sys.triggers tri
5> go
TriggerName
------------------------------------------------------
AfterDeleteVIP

也就握喚是把那一段 創建觸發器段漏凱的語句, 放到一個 @Sql 的變數中。
然後 EXECUTE (@sql);

那麼在存儲過程執行完畢後,觸發器就創建了。

Ⅹ sql 中觸發器怎麼調用存儲過程sp_addlogin

如果sp_addlogin沒有變數的話
直接寫 exec sp_addlogin 就可以調用了
假設有變陸枯量 exec sp_addlogin 『變數1'模悉渣 ,『變旦悄量2』