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
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 行受影响)