Microsoft SQL Server 存储过程
Microsoft SQL Server 存储过程
TRIGGER
DDL触发器:主要用于防止对数据库架构、视图、表、存储过程等进行的某些修改;DDL事件是指对数据库CREATE,ALTER,DROP审核及规范数据库操作,创建用来监视并响应该数据库或服务器实例中的活动的事件通知时,可以指定相应事件类型或事件组,数据库(DataBase)级别和服务器(Server)级别;
DML触发器:DML事件是指对表或视图的INSERT,UPDATE,DELETE更新级联操作等;
查看触发器
--查看服务器级别DDL触发器及事件: select * from sys.server_triggers select * from sys.server_trigger_events
--查看数据库级别DDL触发器及事件 SELECT * FROM sys.triggers SELECT * FROM sys.trigger_events
--查看数据库中DML类型触发器信息 select * from sysobjects where xtype='TR' SELECT * FROM sys.all_objects WHERE type='TR' --查看触发器一般信息 EXECUTE SP_HELP TRI_NAME --查看触发器代码信息 EXECUTE SP_HELPTEXT TRI_NAME
创建触发器
--创建服务器级别的DDL触发器 if exists(select * from sys.server_triggers where name='tri_ddl_db') --删除服务器级别的触发器 drop trigger tri_ddl_db on all server go create trigger tri_ddl_db on all server for create_database,drop_database,alter_database as declare @EventData xml set @EventData = EVENTDATA(); -- 当触发器执行时,该函数会返回触发器的事件信息。 select EVENTDATA(); select '触发器tri_ddl_db禁止创建、修改、删除数据库操作' select @EventData.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)') as EventType, --事件类型 @EventData.value('(/EVENT_INSTANCE/PostTime)[1]','nvarchar(max)') as PostTime, --事件触发的时间 @EventData.value('(/EVENT_INSTANCE/ServerName)[1]','nvarchar(max)') as ServerName, --计算机名 @EventData.value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)') as DatabaseName, --数据库名 @EventData.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') as CommandText --操作命令文本 rollback go
--判断数据库级别的触发器是否存在 AND name='tri_ddl_tab') --删除数据库级别的触发器 DROP TRIGGER tri_ddl_tab ON DATABASE GO --创建DDL触发器 CREATE TRIGGER tri_ddl_tab ON DATABASE --指定触发器事件 FOR create_table,alter_table,drop_table AS print 'DDL触发器已禁止对表进行操作' --对操作进行回滚 rollback GO
--创建触发器禁止更改表内容 CREATE TRIGGER TRI_DATABASENAME_TABLENAME ON [DATABASENAME].[dbo].[TABLENAME] FOR INSERT,UPDATE,DELETE AS rollback print'更新数据不成功!' GO --触发器创建时系统自动创建Inserted和Delete2个表放在内存中触发器执行完成后表也会同时删除。 --Insert表:存放由执行insert或update语句要向表中插入的所有行 --Delete表:存放由执行delete或update语句要向表中删除的所有行
CREATE TRIGGER tri_test_t1 ON [dbo].[t1] for insert,delete,update AS begin --插入及更新数据 SELECT * into aa FROM inserted --更新及删除数据 SELECT * into bb from deleted end Go
--raiserror函数 CREATE TRIGGER TRI_NAME ON TABLE_NAME FOR UPDATE AS if update(id) begin ,) rollback end GO
--利用instead of 替代触发器实现工资的自动计算。 create table salary_table ( id int identity primary key, salary money, ,), realsalary money ) Go create trigger salary_trig on salary_table instead of insert as ,) select @salary=salary,@percent=[percent]from inserted -@percent)) go ,0.2)
修改触发器
ALTER TRIGGER TRI_NAME
启用或禁用触发器
--启用和禁用服务器级别DDL触发器: enable trigger tri_ddl_db on all server; disable trigger tri_ddl_db on all server;
--启用和禁用数据库级别DDL触发器 enable trigger tri_ddl_view on database; disable trigger tri_ddl_view on database;
删除触发器
--删除服务器级别的DDL触发器 DROP TRIGGER tri_ddl_db ON ALL SERVER
--删除数据库级别的DDL触发器 DROP TRIGGER tri_ddl_tab ON DATABASE GO
DROP TRIGGER TRI_NAME
存储过程
查看存储过程
--通过系统存储过程sp_helptext可显示规则、默认值、没有加密的存储过程,用户定义的函数、触发器或视图的文本。 exec sp_helptext pro_name exec sp_depends pro_name exec sp_help pro_name
2.2创建存储过程
--创建没有参数的存储过程 create procedure student_info as select student.sno,sname,cname,grade from student,sc,course where student.sno=sc.sno and course.cno=sc.cno go --执行存储过程 exec student_info
--创建带有输入参数的存储过程 create procedure student_info2 ),) as select student.sno,sname,cname,grade from student,sc,course where student.sno=sc.sno and course.cno=sc.cno and sname=@xm and cname=@kcm go --存储过程调用形式 -- 按位置传送参数值 exec student_info2 '李明','高等数学' --使用参数名传送 exec student_info2 @xm='李明',@kcm='高等数学' exec student_info2 @kcm='高等数学',@xm='李明'
create procedure stud_info3 )='女' as if (@startdate is null or @enddate is null or @sex is null) begin ,) return end select * from student where sbirth between @startdate and @enddate and ssex=@sex order by sbirth go exec stud_info3 '1991-1-1','1992-12-31'
--创建带有通配符参数的存储过程 if exists (select name from sysobjects where name='student_info3' and type='P') drop procedure student_info3 go create procedure student_info3 )='刘%' as select student.sno,sname,cname,grade from student join sc join course on course.cno=sc.cno on student.sno=sc.sno where sname like @xm go execute student_info3 '[王张]%'
--创建带有output参数的存储过程 if exists (select name from sysobjects where name='student_info4' and type='p') drop procedure student_info4 go create procedure student_info4 ),@pjf tinyint output as select @pjf=AVG(grade) from student join sc on student.sno=sc.sno where sname=@xm go declare @pjf tinyint exec student_info4 '邓立新',@pjf output select '邓立新',@pjf create procedure stud_info @startdate date,@enddate date, @recordcount int output as if (@startdate is null or @enddate is null) begin ,) return end select * from student where sbirth between @startdate and @enddate order by sbirth select @recordcount=@@ROWCOUNT Go --其中,@@ROWCOUNT是SQL Server用来返回受上一语句影响的行数的系统变量,在这里用它来返回符合条件记录数。 declare @recordcount int exec stud_info '1991-1-1','1992-12-31' ,@recordcount output select @recordcount as '人数' go
--使用with encryption选项对用户隐藏存储过程 create procedure encrypt_this with encryption as select * from student Go exec sp_helptext encrypt_this
--创建用户自己定义的存储过程 --创建一个过程,显示表名以xs开头的所有表及其索引。如果没有指定参数,此过程返回表名以kc开头的所有表及对应索引 create procedure sp_showtable )='xs%' as select sysobjects.name as table_name, sysindexes.name as index_name from sysindexes join sysobjects on sysindexes.id=sysobjects.id where sysobjects.name like @table go exec sp_showtable 'xs%' go
2.3修改存储过程
--重命名存储过程 sp_rename old_procedure_name, new_procedure_name
ALTER PROCEDURE teacher_proc1 WITH RECOMPILE, ENCRYPTION AS SELECT teacher_id,name,tech_title,telephone FROM teacher_info WHERE gender = '女' GO --在创建一个按照性别统计人数的存储过程stud_proc3,要求输入性别的值后, --返回对应性别的学生人数,但需保证其在每次被执行时都被重编译处理。 create procedure stud_proc (),@man_count int output) with recompile as select @man_count=COUNT(*) from student where ssex=@sex go declare @man_count int exec stud_proc '女',@man_count output select @man_count as '人数' go
2.4删除存储过程
DROP PROCEDURE teacher_info_proc1
Microsoft SQL Server 存储过程的更多相关文章
- Microsoft SQL Server 存储过程举例
-- if SP is existed, drop it. if (object_id('InvHoldToDPS', 'P') is not null) drop proc InvHoldToDPS ...
- sql: MySQL and Microsoft SQL Server Stored Procedures IN, OUT using csharp code
MySQL存储过程: #插入一条返回值涂聚文注 DELIMITER $$ DROP PROCEDURE IF EXISTS `geovindu`.`proc_Insert_BookKindOut` $ ...
- SQL Server存储过程
创建于2016-12-24 16:12:19 存储过程 概念: 1.存储过程是在数据库管理系统中保存的.预先编译的.能实现某种功能的SQL程序,它是数据库应用中运用比较广泛的 一种数据对象. 2.存储 ...
- 从 Microsoft SQL Server 迁移到 Oracle
来源于:http://www.oracle.com/technetwork/cn/database/migration/sqlserver-095136-zhs.html Oracle SQL Dev ...
- 最有效地优化 Microsoft SQL Server 的性能
为了最有效地优化 Microsoft SQL Server 的性能,您必须明确当情况不断变化时,性能将在哪些方面得到最大程度的改进,并集中分析这些方面.否则,在这些问题上您可能花费大量的时间和精力 ...
- Microsoft SQL Server 管理 (常用管理及维护命令)
--查询当前连接的实例名 select @@servername --察看任何数据库属性 sp_helpdb master --设置单用户模式,同时立即断开所有用户 alter database No ...
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集
XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...
- SQL Server——存储过程
我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点.如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析.编译 ...
- Amazon RDS 上的 Microsoft SQL Server » 导入和导出 SQL Server 数据库
导入和导出 SQL Server 数据库 Amazon RDS 支持使用完整备份文件 (.bak 文件) 对 Microsoft SQL Server 数据库进行本机备份和还原.您可以在单个便携式文件 ...
随机推荐
- 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值
关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...
- Applications using Launch Screen Files and targetting iOS 7.1 and earlier need to also include a Launch Image in an Asset Catalog.
在使用xcode6建的项目时,有时在ios7模拟器下会出现一下情况 导航栏上方和tabbar下方会有黑边 并且会有一下警告: Applications using Launch Screen File ...
- [Codeforces 623A] Graph and String
[题目链接] http://codeforces.com/contest/623/problem/A [算法] 首先 , 所有与其他节点都有连边的节点需标号为'b' 然后 , 我们任选一个节点 , 将 ...
- flask-migrate 数据迁移
作用:做数据库迁移依赖:flask-script flask-sqlalchemy 使用 项目结构 manage.py(其它文件内容与flask-sqlalchemy中一样) from s8day13 ...
- C#实现的鼠标钩子
http://www.oschina.net/code/snippet_104607_45975 使用 Socket 获得网页内容,可以捕获错误页的内容 HttpClient http://www.o ...
- uml图六种箭头的含义(转载)
在看一些技术博客的时候,经常会见到博客里画上很多uml图.因为经常会被这几种表达关系的箭头搞混,这里我就把常见的6种箭头表达的含义理一下. 泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述, ...
- php编译安装参数详解
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/loc ...
- Spark之RDD的定义及五大特性
RDD是分布式内存的一个抽象概念,是一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,能横跨集群所有节点并行计算,是一种基于工作集的应用抽象. RDD底层存储原理:其数据分布存储于多台机器上 ...
- Linux学习笔记之Linux系统启动过程
Linux系统的启动过程可以分为五个阶段: 内核的引导 运行init 系统初始化 建立终端 用户登录系统 1.内核引导: 当计算机打开电源后,首先进行BIOS开机自检,按照BIOS中设置的启动设备(一 ...
- [C陷阱和缺陷] 第6章 预处理器
在严格意义上的编译过程开始之前,C语言预处理器首先对程序代码作了必要的转换处理.因此,我们运行的程序实际上并不是我们所写的程序.预处理器使得编程者可以简化某些工作,它的重要性可以由两个主要的原因说 ...