MS SQL Server之光标、存储过程和触发器
光标
通常数据库操作被认为是以数据集为基础的操作,但是光标被用于以记录为单位来进行操作,来获取数据库中的数据的子集。光标一般用于过程化程序里的嵌入的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 ]
例如:
BEGIN
DECLARE @custname VARCHAR(30);
DECLARE namecursor CURSOR FOR SELECT CUST_NAME FORM TBL_CUSTOM OPEN namecursor;
FETCH NEXT FROM namecursor INTO @custname
WHILE (@@FETCH_STATUS<>-1)
BEGIN FETCH NEXT FORM namecursor INTO @custname
print 'custname:'+@custname
END CLOSE namecursor
DEALLOCATE namecursor//释放资源
END
CLOSE:对光标操作完成之后,关闭光标。
存储过程
存储过程是一组关联的SQL语句,通常被成为函数和子程序。存储过程可以嵌套在另一个存储过程里面。
在SQL Server定义存储过程如下:
GO
/****** Object: StoredProcedure [dbo].[select_terminal] Script Date: 08/06/2015 13:51:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- 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>
AS
BEGIN
declare @tsn varchar(50)
--declare @isOnline int declare QueryTsn cursor for select top 10 tsn from tTerminal
OPEN QueryTsn; fetch next from QueryTsn into @tsn while (@@FETCH_STATUS=0)
BEGIN
Fetch next from QueryTsn into @tsn
print 'tsn:'+convert(varchar,@tsn)
END
close QueryTsn
deallocate 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=@id
END
执行存储过程如下:
USE [DB_NAME]
GO DECLARE @return_value int EXEC @return_value = [dbo].[select_terminal] SELECT 'Return Value' = @return_value GO
触发器
触发器是数据中编译了的SQL过程,基于数据库里发生的其他行为来执行操作。可以在insert、delete或update之后执行,可以检查数据完整性,可以回退事务。
SQL Server 创建触发器的语法如下:
CREATE TRIGGER TRIGGER_NAME
ON TABLE_NAME
FOR {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 ON
GO
SET QUOTED_IDENTIFIER ON
GO ALTER TRIGGER [dbo].[createtable]
ON [dbo].[t508]
FOR Insert
AS
BEGIN
declare @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
版权声明:本文为博主原创文章,未经博主允许不得转载。
MS SQL Server之光标、存储过程和触发器的更多相关文章
- 遍历SQL SERVER中所有存储过程和触发器
如果需要查找某个存储过程或触发器中是否含有某段文本(比如:你想知道有哪些存储过程操作了某个表) 可以这么写 select name from sysobjects o, syscomments s w ...
- Sql Server系列:存储过程
1 存储过程简介 存储过程是使用T-SQL代码编写的代码段.在存储过程中,可以声明变量.执行条件判断语句等其他编程功能.在MS SQL Server 2012中存储过程主要分三类:系统存储过程.自定义 ...
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...
- 在易语言中调用MS SQL SERVER数据库存储过程方法总结
Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...
- VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本
本文代码转载自红雨先生 *-----------------------------------------------* SqlServer 相关函数*----------------------- ...
- MS SQL SERVER 中的系统表
MS SQL SERVER 中的系统表 序号 名称 说明 备注 1 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行. 2 syscomments 包含每 ...
- (火炬)MS SQL Server数据库案例教程
(火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...
- MS SQL server对象类型type
执行下面代码,将获取ms sql server对象类型以及其说明 IF OBJECT_ID('tempdb.dbo.#type') IS NOT NULL DROP TABLE #type CREAT ...
- MS SQL SERVER搜索某个表的主键所在的列名
原文:MS SQL SERVER搜索某个表的主键所在的列名 SELECT SYSCOLUMNS.name FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEX ...
随机推荐
- 转 UML类图几种关系的总结
UML类图几种关系的总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregati ...
- lnmp 在nginx中配置相应的错误页面error_page
1. 创建自己的404.html页面 2.更改nginx.conf在http定义区域加入: fastcgi_intercept_errors on; 3.更改nginx.conf(或单独网站配置文件, ...
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
因为同样的方法在java中没有问题,放到web工程中就出现了问题.网上查到的资料,说只要把mysql-connector-java-5.1.7-bin.jar放入tomcat中的lib文件夹就可以.很 ...
- sublimetext 使用正则表达式匹配中文
[\x{4e00}-\x{9fa5}] ============================================= 参考资料 1.在javascript下正确的\x4e00-\x9fa ...
- Linux——常用命令详解
文件处理命令:ls -l drwxr-xr-x 文件 d rwx r-x r-x d:表示directory 是一个目录 - 表示二进制文件 l 表示链接文件l ...
- python set集合操作
set集合是一个无序且不重复的集合. 创建一个set集合: name = set('sdd') name 返回结果:{'d', 's'} add 功能:增加集合元素 name = {'d', 's'} ...
- eclipse导入github项目
以jeesite为例, github上面的项目大都是基于git方式进行版本控制以及使用maven构建的项目. 1 使用时,需先用eclipse的以git方式从github上下载代码. 下载后得到mav ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- log4net:保存日志到数据库
1:下载log4net http://logging.apache.org/log4net/download_log4net.cgi 2:引用到项目 下载以后,在项目中引用log4net.dll 3: ...
- 响应式布局 Bootstrap(01)
1.是什么?Bootstrap,来自 Twitter,是目前最受欢迎的前端框架,Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷 Boot ...