在SQL触发器或存储过程中获取登录用户信息

SQL触发器存储过程中,可以获取程序登录的用户。下面我们就开始介绍,怎样实现在SQL触发器或存储过程中获取在程序登录的用户。在插入,更新或删除的存储过程,把登录程序当前用户传入进去。在存储过程中,再把相关信息存入局部(#)临时表中,这样子,在触发器即可获取了。

创新互联公司是一家集网站建设,宁陵企业网站建设,宁陵品牌网站建设,网站定制,宁陵网站建设报价,网络营销,网络优化,宁陵网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

下面代码示例,以一个[Member]表作例,可以参详:

 
 
 
  1. Member  
  2.  
  3. CREATE TABLE Member  
  4.  
  5. (  
  6.  
  7. Member_nbr INT IDENTITY(1,1) PRIMARY EKY NOT NULL,  
  8.  
  9. [Name] NVARCHAR(30),  
  10.  
  11. Birthday DATETIME,  
  12.  
  13. Email NVARCHAR(100),  
  14.  
  15. [Address] NVARCHAR(100)  
  16.  
  17. )  
  18.  
  19. GO 

插入存储过程:

 
 
 
  1. MemberSp_Insert  
  2.  
  3. CREATE PROCEDURE MemberSp_Insert  
  4.  
  5. (  
  6.  
  7. --Other parameter  
  8.  
  9. @Operater NVARCHAR(50) --带到此参数,可从程序的用户传至数据库  
  10.  
  11. )  
  12.  
  13. AS  
  14.  
  15. BEGIN 

处理插入事务:

 
 
 
  1. ---INSERT INTO [dbo].[Member] (xxx) VALUES(xxx) 

把相关信息存入临时表,方便在触发器时取到:

 
 
 
  1. IF OBJECT_ID('#AuditWho') IS NOT NULL  
  2.  
  3. DROP TABLE [#AuditWho]  
  4.  
  5. CREATE TABLE [#AuditWho] (PrimaryKey INT,Operater NVARCHAR(50))  
  6.  
  7. INSERT INTO [#AuditWho] VALUES(SCOPE_IDENTITY(),@Operater)  
  8.  
  9. END  
  10.  
  11. GO 

更新存储过程:

 
 
 
  1. MemberSp_Update  
  2.  
  3. CREATE PROCEDURE MemberSp_Update  
  4.  
  5. (  
  6.  
  7. --Other parameter  
  8.  
  9. @Member_nbr INT,  
  10.  
  11. @Operater NVARCHAR(50) --带到此参数,可从程序的用户传至数据库  
  12.  
  13. )  
  14.  
  15. AS  
  16.  
  17. BEGIN 

处理更新事务:

 
 
 
  1. ---UPDATE [dbo].[Member] SET [xxx] = xxx, ... WHERE [Member_nbr] = @Member_nbr 

把相关信息存入临时表,方便在触发器时取到:

 
 
 
  1. IF OBJECT_ID('#AuditWho') IS NOT NULL  
  2.  
  3. DROP TABLE [#AuditWho]  
  4.  
  5. CREATE TABLE [#AuditWho] (PrimaryKey INT,Operater NVARCHAR(50))  
  6.  
  7. INSERT INTO [#AuditWho] VALUES(@Member_nbr,@Operater)  
  8.  
  9. END  
  10.  
  11. GO 

删除存储过程:

 
 
 
  1. MemberSp_Delete  
  2.  
  3. CREATE PROCEDURE MemberSp_Delete  
  4.  
  5. (  
  6.  
  7. @Member_nbr INT,  
  8.  
  9. @Operater NVARCHAR(50) --带到此参数,可从程序的用户传至数据库  
  10.  
  11. )  
  12.  
  13. AS  
  14.  
  15. BEGIN 

处理删除事务:

 
 
 
  1. ---DELETE FROM [dbo].[Member] WHERE [Member_nbr] = @Member_nbr 

把相关信息存入临时表,方便在触发器时取到:

 
 
 
  1. IF OBJECT_ID('#AuditWho') IS NOT NULL  
  2.  
  3. DROP TABLE [#AuditWho]  
  4.  
  5. CREATE TABLE [#AuditWho] (PrimaryKey INT,Operater NVARCHAR(50))  
  6.  
  7. INSERT INTO [#AuditWho] VALUES(@Member_nbr,@Operater)  
  8.  
  9. END  
  10.  
  11. GO 

#p#

从上面的存储过程,用户相关的信息(应用程序的用户信息)已经在存储过程中存入临时表中,接下来,在触发器,怎样获取呢。可以参考下面的触发器代码:

插入触发器:

 
 
 
  1. MemberTr_Insert  
  2.  
  3. CREATE TRIGGER [dbo].[MemberTr_Insert]   
  4.  
  5. ON [dbo].[Member]  
  6.  
  7. FOR INSERT  
  8.  
  9. AS  
  10.  
  11. BEGIN  
  12.  
  13. IF @@ROWCOUNT = 0 RETURN  
  14.  
  15. SET NOCOUNT ON 

事务处理:

 
 
 
  1. DECLARE @Operater NVARCHAR(50),@Member_nbr INT  
  2.  
  3. SELECT @Member_nbr = [Member_nbr] FROM inserted  
  4.  
  5. SELECT @Operater = [Operater] FROM [#AuditWho] WHERE [PrimaryKey] = @Member_nbr 

插入Audit 表中:

 
 
 
  1. INSERT INTO ....  
  2.  
  3. END  
  4.  
  5. GO 

更新触发器:

 
 
 
  1. MemberTr_Update  
  2.  
  3. CREATE TRIGGER [dbo].[MemberTr_Update]   
  4.  
  5. ON [dbo].[Member]  
  6.  
  7. FOR UPDATE  
  8.  
  9. AS  
  10.  
  11. BEGIN  
  12.  
  13. IF @@ROWCOUNT = 0 RETURN  
  14.  
  15. SET NOCOUNT ON 

事务处理:

 
 
 
  1. DECLARE @Operater NVARCHAR(50),@Member_nbr INT  
  2.  
  3. SELECT @Member_nbr = [Member_nbr] FROM deleted  
  4.  
  5. SELECT @Operater = [Operater] FROM [#AuditWho] WHERE [PrimaryKey] = @Member_nbr 

插入Audit 表中:

 
 
 
  1. INSERT INTO ....  
  2.  
  3. END  
  4.  
  5. GO 

删除触发器:

 
 
 
  1. MemberTr_Delete  
  2.  
  3. CREATE TRIGGER [dbo].[MemberTr_Delete]   
  4.  
  5. ON [dbo].[Member]  
  6.  
  7. FOR DELETE  
  8.  
  9. AS  
  10.  
  11. BEGIN  
  12.  
  13. IF @@ROWCOUNT = 0 RETURN  
  14.  
  15. SET NOCOUNT ON 

事务处理:

 
 
 
  1. DECLARE @Operater NVARCHAR(50),@Member_nbr INT  
  2.  
  3. SELECT @Member_nbr = [Member_nbr] FROM deleted  
  4.  
  5. SELECT @Operater = [Operater] FROM [#AuditWho] WHERE [PrimaryKey] = @Member_nbr 

插入Audit 表中:

 
 
 
  1. INSERT INTO ....  
  2.  
  3. END  
  4.  
  5. GO 

按照以上的步骤操作就可以利用SQL触发器或存储过程来获得程序登录的用户了。本文就介绍到这里,希望能对各位有所帮助。

【编辑推荐】

  1. 误删SQL Server日志文件后怎样附加数据库
  2. SQL Server 2005数据库用户权限管理的设置
  3. 浅析SQL Server数据库专用管理员连接DAC的使用
  4. 在SQL SERVER 2005执行存储过程的权限分配问题
  5. T-SQL行列相互转换命令:PIVOT和UNPIVOT使用详解

网站栏目:在SQL触发器或存储过程中获取登录用户信息
文章转载:http://www.shufengxianlan.com/qtweb/news3/555253.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联