掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在SQL觸發(fā)器或存儲過程中,可以獲取程序登錄的用戶。下面我們就開始介紹,怎樣實現(xiàn)在SQL觸發(fā)器或存儲過程中獲取在程序登錄的用戶。在插入,更新或刪除的存儲過程,把登錄程序當(dāng)前用戶傳入進(jìn)去。在存儲過程中,再把相關(guān)信息存入局部(#)臨時表中,這樣子,在觸發(fā)器即可獲取了。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),寧陵企業(yè)網(wǎng)站建設(shè),寧陵品牌網(wǎng)站建設(shè),網(wǎng)站定制,寧陵網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,寧陵網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
下面代碼示例,以一個[Member]表作例,可以參詳:
- Member
- CREATE TABLE Member
- (
- Member_nbr INT IDENTITY(1,1) PRIMARY EKY NOT NULL,
- [Name] NVARCHAR(30),
- Birthday DATETIME,
- Email NVARCHAR(100),
- [Address] NVARCHAR(100)
- )
- GO
插入存儲過程:
- MemberSp_Insert
- CREATE PROCEDURE MemberSp_Insert
- (
- --Other parameter
- @Operater NVARCHAR(50) --帶到此參數(shù),可從程序的用戶傳至數(shù)據(jù)庫
- )
- AS
- BEGIN
處理插入事務(wù):
- ---INSERT INTO [dbo].[Member] (xxx) VALUES(xxx)
把相關(guān)信息存入臨時表,方便在觸發(fā)器時取到:
- IF OBJECT_ID('#AuditWho') IS NOT NULL
- DROP TABLE [#AuditWho]
- CREATE TABLE [#AuditWho] (PrimaryKey INT,Operater NVARCHAR(50))
- INSERT INTO [#AuditWho] VALUES(SCOPE_IDENTITY(),@Operater)
- END
- GO
更新存儲過程:
- MemberSp_Update
- CREATE PROCEDURE MemberSp_Update
- (
- --Other parameter
- @Member_nbr INT,
- @Operater NVARCHAR(50) --帶到此參數(shù),可從程序的用戶傳至數(shù)據(jù)庫
- )
- AS
- BEGIN
處理更新事務(wù):
- ---UPDATE [dbo].[Member] SET [xxx] = xxx, ... WHERE [Member_nbr] = @Member_nbr
把相關(guān)信息存入臨時表,方便在觸發(fā)器時取到:
- IF OBJECT_ID('#AuditWho') IS NOT NULL
- DROP TABLE [#AuditWho]
- CREATE TABLE [#AuditWho] (PrimaryKey INT,Operater NVARCHAR(50))
- INSERT INTO [#AuditWho] VALUES(@Member_nbr,@Operater)
- END
- GO
刪除存儲過程:
- MemberSp_Delete
- CREATE PROCEDURE MemberSp_Delete
- (
- @Member_nbr INT,
- @Operater NVARCHAR(50) --帶到此參數(shù),可從程序的用戶傳至數(shù)據(jù)庫
- )
- AS
- BEGIN
處理刪除事務(wù):
- ---DELETE FROM [dbo].[Member] WHERE [Member_nbr] = @Member_nbr
把相關(guān)信息存入臨時表,方便在觸發(fā)器時取到:
- IF OBJECT_ID('#AuditWho') IS NOT NULL
- DROP TABLE [#AuditWho]
- CREATE TABLE [#AuditWho] (PrimaryKey INT,Operater NVARCHAR(50))
- INSERT INTO [#AuditWho] VALUES(@Member_nbr,@Operater)
- END
- GO
#p#
從上面的存儲過程,用戶相關(guān)的信息(應(yīng)用程序的用戶信息)已經(jīng)在存儲過程中存入臨時表中,接下來,在觸發(fā)器,怎樣獲取呢。可以參考下面的觸發(fā)器代碼:
插入觸發(fā)器:
- MemberTr_Insert
- CREATE TRIGGER [dbo].[MemberTr_Insert]
- ON [dbo].[Member]
- FOR INSERT
- AS
- BEGIN
- IF @@ROWCOUNT = 0 RETURN
- SET NOCOUNT ON
事務(wù)處理:
- DECLARE @Operater NVARCHAR(50),@Member_nbr INT
- SELECT @Member_nbr = [Member_nbr] FROM inserted
- SELECT @Operater = [Operater] FROM [#AuditWho] WHERE [PrimaryKey] = @Member_nbr
插入Audit 表中:
- INSERT INTO ....
- END
- GO
更新觸發(fā)器:
- MemberTr_Update
- CREATE TRIGGER [dbo].[MemberTr_Update]
- ON [dbo].[Member]
- FOR UPDATE
- AS
- BEGIN
- IF @@ROWCOUNT = 0 RETURN
- SET NOCOUNT ON
事務(wù)處理:
- DECLARE @Operater NVARCHAR(50),@Member_nbr INT
- SELECT @Member_nbr = [Member_nbr] FROM deleted
- SELECT @Operater = [Operater] FROM [#AuditWho] WHERE [PrimaryKey] = @Member_nbr
插入Audit 表中:
- INSERT INTO ....
- END
- GO
刪除觸發(fā)器:
- MemberTr_Delete
- CREATE TRIGGER [dbo].[MemberTr_Delete]
- ON [dbo].[Member]
- FOR DELETE
- AS
- BEGIN
- IF @@ROWCOUNT = 0 RETURN
- SET NOCOUNT ON
事務(wù)處理:
- DECLARE @Operater NVARCHAR(50),@Member_nbr INT
- SELECT @Member_nbr = [Member_nbr] FROM deleted
- SELECT @Operater = [Operater] FROM [#AuditWho] WHERE [PrimaryKey] = @Member_nbr
插入Audit 表中:
- INSERT INTO ....
- END
- GO
按照以上的步驟操作就可以利用SQL觸發(fā)器或存儲過程來獲得程序登錄的用戶了。本文就介紹到這里,希望能對各位有所幫助。
【編輯推薦】

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流