SqlServer中获取当前会话链接的客户端信息及触发器有关注意事项

1、获取当前进程会话ID的全局SqlServer变量为:@@SPID;

2、获取当前会话的客户端信息的语句如下:

select

a.session_id,

a.login_time,   --

a.host_name,  --客户端主机名称

a.login_name,  --登陆名称

b.connection_id , --链接ID

a.[program_name], --客户端应用名称

b.client_net_address --客户单IP地址

from sys.dm_exec_sessions a , sys.dm_exec_connections b

where a.session_id=b.session_id and a.session_id = @@SPID

3、触发器注意事项:

例如:

存在如下触发器:
ALTER TRIGGER [dbo].[Test] 
   ON  [dbo].[CBas_Category]
   AFTER UPDATE
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

    -- Insert statements for trigger here
PRINT 'updaded '+CONVERT(NVARCHAR(100),GETDATE(),120)

DECLARE @orgVal NVARCHAR(100)
DECLARE @curVal NVARCHAR(100)

SELECT TOP 1 @orgVal=cc.Cat_Name,@curVal=b.Cat_Name
FROM CBas_Category cc
JOIN INSERTED b ON cc.Cat_ID=b.cat_id

PRINT 'orgVal:'+@orgVal +' curVal:'+@curVal
END

(1)在触发中想要获取某个字段的原始值时,不能直接从原表中查找某个字段内容;

例如:

执行下面的更新语句,想要获取到Cat_Name的原来值,和修改后的值,取到的都是修改后的值

UPDATE CBas_Category
SET
Cat_Name = Cat_Name+'1'
WHERE Cat_ID='000029'

执行结果:
updaded 2014-10-21 10:18:47
orgVal:T息隐(米索前列醇+米非斯酮)1 curVal:T息隐(米索前列醇+米非斯酮)1

(1 行受影响)


那么如何可以取到原来的值和修改后的值呢?

只要把触发中引用原表的地方换成Deleted即可;


(2)某个语句是否触发触发器,与这个语句是否实际影响到记录无关,只要触发器要求的动作发生就会触发触发器;

例如:

当你使用下面的语句进行更新时,是会触发这个触发器的,尽管这个更新不会影响到任何一行
UPDATE CBas_Category
SET
 Cat_Name = Cat_Name
WHERE 1<>1

执行结果
updaded 2014-10-21 09:51:05

(0 行受影响)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值