MS SQL Server之光标、存储过程和触发器
来源:互联网 发布:淘宝男皮鞋 编辑:程序博客网 时间:2024/05/18 00:36
光标
通常数据库操作被认为是以数据集为基础的操作,但是光标被用于以记录为单位来进行操作,来获取数据库中的数据的子集。光标一般用于过程化程序里的嵌入的SQL语句。
对光标的定义如下:
DECLARE CURSOR_NAME CURSOR
FOR SELECT_STATEMENT[FOR [READ ONLY | UPDATE {[COLUMN_LIST]}]
光标创建之后可以进行如下操作:
OPEN:打开定义的光标。
OPEN CURSOR_NAME
FETCH:从光标获取记录,赋予程序变量。
FETCH NEXT FORM CURSOR_NAME [ INTO FETCH_LIST ]
例如:
BEGINDECLARE @custname VARCHAR(30);DECLARE namecursor CURSOR FOR SELECT CUST_NAME FORM TBL_CUSTOMOPEN namecursor;FETCH NEXT FROM namecursor INTO @custnameWHILE (@@FETCH_STATUS<>-1)BEGIN FETCH NEXT FORM namecursor INTO @custnameprint 'custname:'+@custnameENDCLOSE namecursorDEALLOCATE namecursor//释放资源END
CLOSE:对光标操作完成之后,关闭光标。
存储过程
存储过程是一组关联的SQL语句,通常被成为函数和子程序。存储过程可以嵌套在另一个存储过程里面。
在SQL Server定义存储过程如下:GO/****** Object: StoredProcedure [dbo].[select_terminal] Script Date: 08/06/2015 13:51:48 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<Author,,Name>-- Create date: <Create Date,,>-- Description:<Description,,>-- =============================================ALTER PROCEDURE [dbo].[select_terminal]--(--@id int--)-- Add the parameters for the stored procedure here--<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, --<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>ASBEGINdeclare @tsn varchar(50)--declare @isOnline int declare QueryTsn cursor for select top 10 tsn from tTerminalOPEN QueryTsn;fetch next from QueryTsn into @tsnwhile (@@FETCH_STATUS=0)BEGIN Fetch next from QueryTsn into @tsnprint 'tsn:'+convert(varchar,@tsn)ENDclose QueryTsndeallocate QueryTsn-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.--SET NOCOUNT ON; -- Insert statements for procedure here--SELECT * from tTerminal where ID=@idEND
USE [DB_NAME]GODECLARE@return_value intEXEC@return_value = [dbo].[select_terminal]SELECT'Return Value' = @return_valueGO
触发器
触发器是数据中编译了的SQL过程,基于数据库里发生的其他行为来执行操作。可以在insert、delete或update之后执行,可以检查数据完整性,可以回退事务。SQL Server 创建触发器的语法如下:
CREATE TRIGGER TRIGGER_NAMEON TABLE_NAMEFOR {INSRT | UPDATE | DELETE [, ..]}AS SQL_STATEMENTS[ RETURN ]
例如:
USE [DB_NAME]GO/****** Object: Trigger [dbo].[createtable] Script Date: 08/06/2015 14:28:35 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[createtable]ON [dbo].[t508]FOR Insert AS BEGINdeclare @sqlstr varchar(1000)set @sqlstr = 'CREATE TABLE [dbo].[zlogt508]([ID] [int] IDENTITY(1,1) NOT NULL,[mID] [int] NOT NULL,[gpsTime] [datetime] NOT NULL,primary key ([ID]))'exec(@sqlstr) PRINT 'You must ask your DBA to drop or alter tables!' END
***创建的触发器在要触发的表的触发器文件内
删除触发器
drop trigger trigger_name
0 0
- MS SQL Server之光标、存储过程和触发器
- MS Sql Server中存储过程与触发器的安全隐患
- Sql Server 存储过程和触发器
- SQL SERVER 存储过程和触发器
- sql server 存储过程和触发器
- SQL SERVER存储过程和触发器
- 一条SQL语句查询MS SQL Server数据库中的所有表、存储过程、触发器
- SQL Server 存储过程和触发器sql语句练习
- MS SQL Server 2005 开发之分页存储过程
- Ms SQL Server 触发器
- SQL-SERVER数据库中的游标、存储过程和触发器
- SQL server Base III (存储过程 和 触发器)
- Sql Server数据库触发器和存储过程实例讲解
- sql server存储过程和触发器简单使用
- [SQL SERVER系列]存储过程,游标和触发器实例[原创]
- MS SQL Server 2005 分页存储过程
- MS SQL Server 2005 分页存储过程
- MS SQL Server:存储过程实例
- noip1996 乘法运算 - 普及组 (模拟)
- POJ3667-Hotel-线段树区间合并(模板)
- 南邮 OJ 1584 连通 OR 不连通
- mysql中select distinct的用法
- iOS开发:开发中如何更改项目名
- MS SQL Server之光标、存储过程和触发器
- c++中的map用法详解
- 悬崖勒马之三年编码的反省
- C语言字符串处理函数
- opencv学习(六)书本《学习Opencv》(中文版)第四章的作业答案第二题(opencv3.0.0+VS2012+win7)
- android实现类似toast效果的圆角dialog警告框
- tmux(终端方便使用cp:http://wowubuntu.com/tmux.html)
- 南邮 OJ 1585 分礼物
- 怎么编辑pdf文件