SQLServer中对所有的用户表生成触发器
测试的时候比较重要,我们可以知道当前交易影响了哪些表
--用于记录用户在当前表上什么时候、做的什么操作:update、insert、delete
create table TriggerRecord
(
operdt datetime, --触发时间
opertp varchar(10), --操作类型:update、insert、delete
opertb varchar(50) --表名
)
--这个表于用保存生成的触发器语句,在过程中循环执行
--因为Sqlserver不允许在一个批次同时执行多条create trigger语句
create table T(sqlTrigger varchar(500))
--循环执行存于表中触发器的存储过程
create proc loopExecTrigger
as
begin
declare @sql varchar(500)
declare cur cursor for select sqlTrigger from T
open cur
fetch cur into @sql
while @@fetch_status=0
begin
execute(@sql)
fetch cur into @sql
end
close cur
deallocate cur
delete T
end
--用于生成插入语句的触发器,并将触发器语句保存到表中
select 'insert into T values(''create trigger T_'+name+' on '+name+' for insert as insert into TriggerRecord values(getdate(),''''insert'''','''''+name+''''');'')' from sysobjects where type='U' and name not in('T','TriggerRecord')
--将以上生成的语句拷贝出来执行
--用于生成更新语句的触发器,并将触发器语句保存到表中
select 'insert into T values(''create trigger T_'+name+'_U on '+name+' for update as insert into TriggerRecord values(getdate(),''''update'''','''''+name+''''');'')' from sysobjects where type='U' and name not in('T','TriggerRecord')
--将以上生成的语句拷贝出来执行
--用于生成删除语句的触发器,并将触发器语句保存到表中
select 'insert into T values(''create trigger T_'+name+'_D on '+name+' for delete as insert into TriggerRecord values(getdate(),''''delete'''','''''+name+''''');'')' from sysobjects where type='U' and name not in('T','TriggerRecord')
--将以上生成的语句拷贝出来执行
--执行通过上面语句生成的语句后,再执行存储生成触发器的存储过程
exec loopExecTrigger
--生成删除全部以T开头的触发器的语句
select 'drop trigger '+name+';' from sysobjects where type='TR' and name l
相关文档:
只是sqlserver 提供的远程数据访问函数; 在本地sqlserver 中取外部数据源数据时候可用;
对连接本地 oracle 操作远程 oracle 不能使用; 测试: pl/sql 中使用:
select * from openrowset(................); 无效!!!!!!!!!!!!!!
在oracle 中需要访问远程数据,需要建立一连接远程oracle 的 dblink ;
再用如下方 ......
--TOP n 实现的通用分页存储过程(转自邹建)
CREATE PROC sp_PageView
@tbname sysname, --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, - ......
declare @areaid varchar(100)
declare @areaname varchar(100)
declare Cur cursor for
select code as areaID,[name] as areaName from dbo.province
open Cur
Fetch next from Cur Into @areaid,@areaname
While @@fetch_status=0
Begin
print('insert into ......