SQL SERVER 写一个触发器 如果该表被修改则获取修改表的计算机名和IP...
发布网友
发布时间:2022-04-27 12:37
我来回答
共1个回答
热心网友
时间:2022-04-09 13:23
在SQLServer上得到客户端信息(操作的数据库名,计算机名,用户名,网卡物理地址,IP地址,程序名)
create proc p_getlinkinfo
@dbname sysname=null,--要查询的数据库名,默认查询所有数据库的连接信息
@includeip bit=0--是否显示IP地址,因为查询IP地址比较费时,所以增加此控制
as
declare @dbid int
set @dbid=db_id(@dbname)
create table #tb(id int identity(1,1),dbname sysname,hostname nchar(128),loginname nchar(128),net_address nchar(12),net_ip nvarchar(15),prog_name nchar(128))
insert into #tb(hostname,dbname,net_address,loginname,prog_name)
select distinct hostname,db_name(dbid),net_address,loginame,program_name from master..sysprocesses
where hostname<>'' and (@dbid is null or )
if @includeip=0 goto lb_show --如果不显示IP地址,就直接显示
declare @sql varchar(500),@hostname nchar(128),@id int
create table #ip(hostname nchar(128),a varchar(200))
declare tb cursor local for select distinct hostname from #tb
open tb
fetch next from tb into @hostname
while @@fetch_status=0
begin
set @sql='ping '+@hostname+' -a -n 1 -l 1'
insert #ip(a) exec master..xp_cmdshell @sql
update #ip set where hostname is null
fetch next from tb into @hostname
end
update #tb set net_ip=left(a,patindex('%:%',a)-1)
from #tb a inner join (
select hostname,a=substring(a,patindex('Ping statistics for %:%',a)+20,20) from #ip
where a like 'Ping statistics for %:%') b on a.hostname=b.hostname
lb_show:
select id,数据库名=dbname,客户机名=hostname,用户名=loginname
,网卡物理地址=net_address,IP地址=net_ip,应用程序名称=prog_name from #tb
GO
//显示所有本机的连接信息:
exec p_getlinkinfo
//显示所有本机的连接信息,包含ip地址:
exec p_getlinkinfo @includeip=1
//显示连接指定数据库的信息:
exec p_getlinkinfo @dbname=表名,@includeip=1
SQL SERVER 写一个触发器 如果该表被修改则获取修改表的计算机名和IP...
在SQLServer上得到客户端信息(操作的数据库名,计算机名,用户名,网卡物理地址,IP地址,程序名)create proc p_getlinkinfo@dbname sysname=null,--要查询的数据库名,默认查询所有数据库的连接信息@includeip bit=0--是否显示IP地址,因为查询IP地址比较费时,所以增加此控制asdeclare @dbid intset @dbid=db...
sqlserver 触发器 怎么获取更新前的值
更新的动作你可以分2步理解,先delete ,再insert所以,前的值在 deleted里 后的值在 inserted里 create trigger t_ATDATEState_updateon listfor updateasif update(ATDATEState)begin declare @b_ATDATEState nvarchar(200) --修改之前的 declare @S_ATDATEState nVARCHAR(200) --修改之后的 d...
如何在oracle触发器器中得到操作当前表的登陆用户及其机器地址_百度...
用触发器的话 CREATE TRIGGER 名成 ON 表名 FOR UPDATE as select * from 表名 where 主键= ?
sqlserver 中创建触发器execute master有什么作用
after等价于for,是事后触发。instead of则会取代原来的操作,例如在你的例子里,将不再执行插入操作,而是执行触发器里的操作。execute as是用来定义模块的执行上下文 EXECUTE AS { CALLER | SELF | OWNER | 'user_name' } 其中CALLER指模块调用方,SELF指创建或更改模块的用户,OWNER指模块的当前所有...
sql如何取得触发器update前的值
1、首先,创建一个触发器,要求是在AddTable表上创建update触发器,如下图所示,然后进入下一步。2、其次,触发器将触发,并显示:the table was updated,如下图所示,然后进入下一步。3、接着,对AddTable表中的数据执行更改操作,如下图所示,然后进入下一步。4、然后,完成上述步骤后,会发现...
SQL SERVER如何实现两台电脑互相连接?
例如:新增A数据库一个表的数据后,同时新增B数据库一个表数据。可以在A数据库触发器写语句,反之B操作A就是在B数据库里面写触发器。首先要执行 sp_addlinkedserver '服务器ip' 然后开始写语句 insert into ip.库名字.dbo.table select * from inserted SQLSERVER 触发器就会将一个服务器上的数据库...
SQL中触发器有什么作用
如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。触发器的优点如下: 触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,...
SQLserver数据库怎么给指定的表区分大小写?
举个例子,假设你想要修改名为“TBL_ACCOUNT”的表,使其区分大小写,你可以在创建表时指定排序规则:CREATE TABLE TBL_ACCOUNT (id INT PRIMARY KEY,username VARCHAR(255) COLLATE Chinese_PRC_CS_AS,password VARCHAR(255));或者,如果你已经创建了表,你可以使用 ALTER TABLE 语句来修改表的排序...
怎么实现两个数据库的同步
少量数据库同步可以采用触发器实现,同步单表即可。 三、配置过程中可能出现的问题 在sql server 2000里设置和使用数据库复制之前,应先检查相关的几台sql server服务器下面几点是否满足: 1、mssqlserver和sqlserveragent服务是否是以域用户身份启动并运行的(.\administrator用户也是可以的) 如果登录用的是本地系统帐户lo...
如何使用触发器实现IP限制用户登录
该触发器对用户EPAY_USER进行了IP限制(只允许'192.168.219.20','192.168.219.22',如果需要设置IP段,用%或?代替即可,如'192.168.219.%‘)。下面看几个例子测试一下:1)从非允许IP地址登陆 (192.168.219.21),连接失败 复制代码代码如下:[oracle@lxdb2 ~]$ sqlplus epay_user@pri ...