如何在触发器内获取值

时间:2016-05-27 13:25:15

标签: sql-server triggers database-trigger context-info set-context-info

我正在使用一个数据库运行我的应用程序,但在某些特定的表插入期间,我正在调用触发器,我需要从另一个DB获取一些值。以前我通过硬编码触发器内的特定数据库名称来做到这一点。我得到了正确但现在我需要删除该DB名称的依赖关系。所以我需要找到以某种其他方式得到该特定值。任何人都可以帮我找到解决方案...

上一次触发。

CREATE TRIGGER [dbo].[xC2C_ADT_Upd] on [dbo].[dmAppt] For Insert,UPDATE   
 AS   
 BEGIN  

 If Not Exists (Select top 1* from inserted)  
 Return  
 declare @ADT_ID UniqueIdentifier  
 Declare @personuid int   
 declare @ApptID int  

 select @personuid = PID, @ApptID = IDAppt from inserted  
 set @ADT_ID = NewID()  

 declare @MSG_Type varchar(1)  
 declare @AddDate datetime  
 declare @LastUpdateDate datetime  
 declare @ServerID [varchar](50)  
 declare @ClientDB [varchar](max)  
 declare @ClientID [varchar](50)  
 set @ServerID =      Convert(varchar(50),CONNECTIONPROPERTY('local_net_address'))   
 set @ClientDB = db_name()  
 select @ClientID = ClientID from dm_asarum_Client_Master..Clients  //here      only my database is hardcoded 
 where DBName_Current = @ClientDB  

现在我做了一些改变,

set @ClientID = (select top 1 CAST(CONTEXT_INFO as varchar(50)) from    sys.dm_exec_sessions where context_info!=0x order by last_request_end_time desc) --ClientID from dm_asarum_Client_Master..Clients    

我在某些SP中设置了Context_info值,如下所示。

alter PROCEDURE [dbo].[dm_ApptResRecurrReasonRelViewSel]      
 (      
 @IDLocation int,      
 @IDApptResource int,      
 @StartDate datetime,      
 @IDApptResRecurr int,    
 @ClientID varchar(50)      
)      
AS      
SET NOCOUNT ON;      

Declare @context_info1 varbinary(128);    

SET    
@context_info1 = CAST(@ClientID as varbinary(128));    

SET    
CONTEXT_INFO @context_info1; 

现在问题是,使用我注意到的SQL Profiler,我能够正确获取此SP中的clintID。但它没有正确地将此Context_info保存在sys.dm_exec_sessions中。当我在sql中手动运行时,

   exec [dm_ApptResRecurrReasonRelViewSel] @IDLocation=101,@IDApptResource=59,@StartDate='2016-05-27 17:00:00',@IDApptResRecurr=NULL,@ClientID='cl_obgyn_reg'

我的context_info值正确更新我不知道我在哪里输了。

0 个答案:

没有答案