易截截图软件、单文件、免安装、纯绿色、仅160KB

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


相关文档:

关于oracle导入sqlserver存在的唯一索引问题

我在把oracle数据导入sqlserver中时,发现在oracle中字段定义为唯一索引时,不同记录的此字段如果为空不被认为是重复的,但在sqlserver中如果此字段为唯一索引字段,不允许有2个以上的空值。郁闷。所以只好将sqlserver中的唯一索引字段手工修改为几个非空的值,但这样程序肯定要进行修改了。需要在程序中为此字段设置不重复 ......

SqlServer存储过程分页

--TOP n 实现的通用分页存储过程(转自邹建)
CREATE PROC sp_PageView
@tbname sysname, --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, - ......

Sqlserver 存储过程大集合

 =================分页==========================
/*分页查找数据*/
CREATE PROCEDURE [dbo].[GetRecordSet] 
@strSql varchar(8000),--查询sql,如select  * from [user]
@PageIndex int,--查询当页号
@PageSize int--每页显示记录
AS
set nocount on
declare @p1 int
declare @current ......

SQLServer数据集合的交、并、差集运算

SQLServer2005通过intersect,union,except和三个关键字对应交、并、差三种集合运算。
他们的对应关系可以参考下面图示
       相关测试实例如下:
use tempdb
go
if (object_id ('t1' ) is not null ) drop table t1
if (object_id ('t2' ) is not null ) drop table t2
go
cre ......

SqlServer命名规范

SqlServer命名规范
参考各种命名规范,我们统一使用命名规范如下:
命名过程中如有现存的缩写,则使用该缩写,如无,一律不得缩写,例:ISBN
数据库:用一个或三个以下英文单词组成,单词首字母大写,如:DepartmentManage;
表名:使用名词性质的单词全拼表示,各单词首字母大写, 使用复数形式,如:Books
 & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号