在SQL觸發(fā)器或存儲過程中獲取登錄用戶信息
在SQL觸發(fā)器或存儲過程中,可以獲取程序登錄的用戶。下面我們就開始介紹,怎樣實現(xiàn)在SQL觸發(fā)器或存儲過程中獲取在程序登錄的用戶。在插入,更新或刪除的存儲過程,把登錄程序當前用戶傳入進去。在存儲過程中,再把相關信息存入局部(#)臨時表中,這樣子,在觸發(fā)器即可獲取了。
下面代碼示例,以一個[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
處理插入事務:
- ---INSERT INTO [dbo].[Member] (xxx) VALUES(xxx)
把相關信息存入臨時表,方便在觸發(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
處理更新事務:
- ---UPDATE [dbo].[Member] SET [xxx] = xxx, ... WHERE [Member_nbr] = @Member_nbr
把相關信息存入臨時表,方便在觸發(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
處理刪除事務:
- ---DELETE FROM [dbo].[Member] WHERE [Member_nbr] = @Member_nbr
把相關信息存入臨時表,方便在觸發(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#
從上面的存儲過程,用戶相關的信息(應用程序的用戶信息)已經(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
事務處理:
- 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
事務處理:
- 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
事務處理:
- 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
【編輯推薦】