存储过程:可以使得对的管理、以及显示关于及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
(1)功能强大,限制少。
(2)可以在单个存储过程中执行一系列 SQL 语句。
(3)可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
(4)存储过程在创建时即在上进行编译,所以执行起来比单个 SQL 语句快。
(5)可以有多个返回值,即多个输出参数,并且可以使用SELECT返回结果集。
函数:是由一个或多个 SQL 语句组成的子程序,可用于封装代码以便重新使用。自定义函数诸多限制,有许多语句不能使用,许多功能不能实现。函数可以直接引用返回值,用表变量返回记录集。但是,用户定义函数不能用于执行一组修改全局数据库状态的操作。
复杂存储过程示例:
以下是复制具有关联关系的多张数据表的存储过程使用方法
--存储过程(在创建之前,首先删除该存储过程) /* use test go drop proc updAndInsertTableDataValue; 1、根据某表的id号,获取表信息然后插入一条新纪录并标记为新,更改之前的为旧 2、根据给定表id获取该表下所有数据项,然后循环,并进行复制 3、在表项的循环复制中,又进行该表项下的评价信息的检索和复制 */ use TEST go create PROCEDURE updAndInsertTableDataValue @tableId int as declare @tName varchar(100),@tUser int,@tState int,@tType int,@tDepType int,@tDepId int,@tUrl varchar(50),@tGType int,@tValidity date declare @newTableId int,@newDataId int --根据表的id号获取表信息,然后赋值 select @tName=tableListName,@tUser=createUser,@tState=tableListState,@tType=tableType,@tDepType=tableDepType,@tDepId=departId ,@tUrl=tableImgUrl,@tGType=gradeType,@tValidity=validity from CW_SELF_TABLE_LIST where tableListId=@tableId; --将值插入到表中,新增一条信息 insert into CW_SELF_TABLE_LIST(createDate,createUser,tableListName,tableListState,tableImgUrl,tableType,tableDepType,departId,tableMark,gradeType,validity) values(CURRENT_TIMESTAMP,@tUser,@tName+'('+CONVERT(varchar(100), GETDATE(), 23)+')' ,@tState,@tUrl,@tType,@tDepType,@tDepId,1,@tGType,@tValidity); --将新生成的信息的主键赋值给变量 set @newTableId = @@identity --将原来的信息改为陈旧信息 update CW_SELF_TABLE_LIST set tableMark=0 where tableListId=@tableId; --******循环该表的数据项,然后将该数据项赋值********** declare tableDataCursor cursor for select tableDataId,orderId,tableDataIntro,tableDataName,tableDataState,tableDataType from CW_SELF_TABLE_DATA where tableListId=@tableId; --开启游标 open tableDataCursor DECLARE @dataId int,@dOrder int,@dIntro varchar(150),@dName varchar(150),@dState int,@dType varchar(100) FETCH NEXT FROM tableDataCursor INTO @dataId,@dOrder,@dIntro,@dName,@dState,@dType while(@@FETCH_STATUS<>-1) begin if(@@FETCH_STATUS<>-2) begin --将值插入到tableData表中 insert into CW_SELF_TABLE_DATA(createDate,orderId,tableDataIntro,tableDataName,tableDataState,tableDataType,tableListId) values(CURRENT_TIMESTAMP,@dOrder,@dIntro,@dName,@dState,@dType,@newTableId) --将新的数据项id的值赋给变量 set @newDataId = @@IDENTITY --***********开始循环数据项中的数据值************ declare tableValueCursor cursor for select orderId,tableState,tableValueIntro,tableValueName from cw_self_table_value where tableDataId=@dataId open tableValueCursor declare @vOrder int ,@vState int ,@vIntro varchar(255),@vName varchar(50) fetch next from tableValueCursor into @vOrder,@vState,@vIntro,@vName while(@@FETCH_STATUS<>-1) begin if(@@FETCH_STATUS<>-2) begin insert into CW_SELF_TABLE_VALUE(createDate,orderId,tableState,tableValueIntro,tableValueName,tableDataId) values(CURRENT_TIMESTAMP,@vOrder,@vState,@vIntro,@vName,@newDataId) end fetch next from tableValueCursor into @vOrder,@vState,@vIntro,@vName end close tableValueCursor deallocate tableValueCursor end FETCH NEXT FROM tableDataCursor INTO @dataId,@dOrder,@dIntro,@dName,@dState,@dType end close tableDataCursor deallocate tableDataCursor return @newTableId go --exec updAndInsertTableDataValue 15;
相关推荐
针对sqlserver 2008 存储过程通过With Encryption加密方式的解密
sqlserver2008 存储过程与储发器 详解 书籍
sql server 2008 存储过程示例带游标
SQLserver2008存储过程编写(有参和无参)
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
SQL Server中存储过程比直接运行SQL语句慢的原因
SqlServer存储过程的导出导入 近日在研究SQL的存储过程,这里我陆续将我在使用存储过程中碰到的问题及解决办法发布到网上,请各位大虾指正。 SqlServer存储过程的导出导入,网上相关资料特别少,经过摸索,这里写...
一步一步操作vs中断点测试sqlserver的存储过程
sqlserver2008存储过程与触发器.pdf
查看SQL SERVER 加密存储过程 查看SQL SERVER 加密存储过程
资源名称:SQL_Server存储过程调试指南内容简介: 存储过程( Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来...
详细介绍了SqlServer的存储过程调试方法,适合初学者及想深入研究的开发人员
sql server系统存储过程,sql server系统存储过程
sqlserver 2008,存储过程,函数 ,解密
主要介绍了SQLServer存储过程中事务的使用方法,简短的代码带大家更好的学习使用SQLServer存储过程中事务,感兴趣的小伙伴们可以参考一下
文档记录了SQL Server在存储运用时的语法,需要有一定的SQL语言学习基本,本文档只是做了梳理与总结,以便查看和识记。
SQLserver存储过程异常处理
可以将SQL Server存储过程转为oracle存储过程的工具
SQLServer 常用存储过程,SQLServer 常用存储过程