日度归档:2019年5月15日

在数据库中存储过程和触发器的区分简介说明


摘要:
下文将阐述数据库中触发器和存储过程的区别,供大家参考


下文将依次讲述存储过程和触发器及它们之间的区别。

触发器简介

触发器在数据库中由表或视图或其它数据库的动作自动触发执行的代码段。
触发器常用于维护数据库中数据表的完整性,自动触发一连串的动作,对数据库的其它活动作出相应的触发操作。
触发器还可用于相应的数据库审计操作。



存储过程简介

我们将一组常用、经常重复使用的sql,采用一个包名进行定义,定义输入、输出和返回表信息,放入数据库中,作为DB服务器中的一个对象,对外服务,我们将此包称之为”存储过程。
存储过程能够返回 select 运行结果,可以处理if while for 等所有sql语言。

存储过程和触发器的区别

1.存储过程是一个sql程序包,用户可以显式的执行此包,可以运行无数次,触发器必须由数据库的某一动作触发运行。
2.存储过程可以接收输入参数并能返回参数信息,而触发器不能接收参数,也无法返回参数信息。
3.存储过程中可以非常灵活的运行事务,触发器不能进行停止事务操作

mssql sqlserver 使用sql脚本将查询结果创建为新数据表的方法分享


摘要:
下文讲述sqlserver中,使用查询结果创建一张新数据表的方法分享,如下所示:
实验环境:sqlserver 2008 R2


---复制表结果和表结构
select * into [新数据表] from [源数据表] where ...
SELECT * into [新数据表] from (select * from [数据表] where ...) b

---只复制表结构
select * into [新数据表] from [源数据表] where  1=0
SELECT * into [新数据表] from (select * from [数据表] where 1=0) b

 ---跨数据库操作
select * into 数据库名.dbo.[新数据表] from 数据库名.dbo.[源数据表] where ...

---快速生成临时表结构的方法
select * into #[临时表名称] from [源数据表] where 1=0 


注意事项:
此种方式无法复制数据库中的默认值、索引、键设置、约束信息,
但标识列的设置信息可带入into中的新表里。

mssql sqlserver 使用sql脚本获取数据表中相同列值出现的次数


摘要:
下文通过使用sql脚本统计出数据表中相同列值出现次数的方法,如下所示
实验环境:sql server 2008 R2



实现思路:
采用count统计符合条件的结果集,count统计时注意列值为null
使用group by对列值进行群组 

例:

create table [maomao365]
(name varchar(10) ,writeDate datetime default getdate()
 )
 go
 
 insert into [maomao365]
 (name)values
 ('sqlblog'),('猫猫小屋'),('猫猫小屋'),
 ('sqlserver'),('sqlblog'),('sql爱好者'),
 ('sqlblog'),('MSSQL'),('数据库')
 go
 
 ---统计数据表中,列值name相同值的个数
 
 select
 isnull(name,'') as name,
 count(isnull(name,''))  as [相同值个数]
 from [maomao365]
 group by isnull(name,'')
 
 
 go
 truncate table [maomao365]
 drop     table [maomao365]