SQL 函数、存储过程、游标与事务模板
2010-08-07 11:38
627 查看
1.标量函数:结果为一个单一的值,可包含逻辑处理过程。其中不能用getdate()之类的不确定性系统函数.
--内联表值函数 -- ================================================ -- Template generated from Template Explorer using: -- Create Inline Function (New Menu).SQL -- -- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. -- -- This block of comments will not be included in -- the definition of the function. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName> ( -- Add the parameters for the function here <@param1, sysname, @p1> <Data_Type_For_Param1, , int>, <@param2, sysname, @p2> <Data_Type_For_Param2, , char> ) RETURNS TABLE AS RETURN ( -- Add the SELECT statement with parameter references here SELECT 0 ) GO
3.多语句表值函数:返回值为一张表,有逻辑处理能力,但仅能对小数据量数据有效,数据量大时,速度很慢.--示意性SQL脚本 DECLARE @MergeDate Datetime DECLARE @MasterId Int DECLARE @DuplicateId Int SELECT @MergeDate = GetDate() DECLARE merge_cursor CURSOR FAST_FORWARD FOR SELECT MasterCustomerId, DuplicateCustomerId FROM DuplicateCustomers WHERE IsMerged = 0 --定义一个游标对象[merge_cursor] --该游标中包含的为:[SELECT MasterCustomerId, DuplicateCustomerId FROM DuplicateCustomers WHERE IsMerged = 0 ]查询的结果. OPEN merge_cursor --打开游标 FETCH NEXT FROM merge_cursor INTO @MasterId, @DuplicateId --取数据到临时变量 WHILE @@FETCH_STATUS = 0 --系统@@FETCH_STATUS = 0 时循环结束 --做循环处理 BEGIN EXEC MergeDuplicateCustomers @MasterId, @DuplicateId UPDATE DuplicateCustomers SET IsMerged = 1, MergeDate = @MergeDate WHERE MasterCustomerId = @MasterId AND DuplicateCustomerId = @DuplicateId FETCH NEXT FROM merge_cursor INTO @MasterId, @DuplicateId --再次取值 END CLOSE merge_cursor --关闭游标 DEALLOCATE merge_cursor --删除游标
[说明:游标使用必须要配对,Open--Close,最后一定要记得删除游标.]
5.事务:当一次处理中存在多个操作,要么全部操作,要么全部不操作,操作失败一个,其他的就全部要撤销,不管其他的是否执行成功,这时就需要用到事务.
begin tran
update tableA
set columnsA=1,columnsB=2
where RecIs=1
if(@@ERROR <> 0 OR @@ROWCOUNT <> 1)
begin
rollback tran
raiserror( '此次update表tableA出错!!' , 16 , 1 )
return
end
insert into tableB (columnsA,columnsB) values (1,2)
if(@@ERROR <> 0 OR @@ROWCOUNT <> 1)
begin
rollback tran
raiserror( '此次update表tableA出错!!' , 16 , 1 )
return
end
end
commit
相关文章推荐
- SQL 函数、存储过程、游标与事务模板
- sql中的函数(4) 系统函数,事务、游标、存储过程及触发器
- sqlserver 函数、存储过程、游标与事务模板
- sql中的函数(4) 系统函数,事务、游标、存储过程及触发器
- sqlserver 函数、存储过程、游标与事务模板
- 触发器、游标、函数、存储过程、事务
- Oracle 存储过程及函数中游标+动态的sql处理
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
- 触发器、游标、函数、存储过程、事务
- SQL存储过程、函数、触发器、游标问答
- sql2005 存储过程使用 事务 和 游标 例子
- MySQL存储过程和函数以及游标使用详解
- db2 存储过程动态游标及函数返回值总结
- SQL中的存储过程中的事务处理。备忘
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- 开发PL/SQl的子程序和包 存储过程和函数
- 用游标遍历某台服务器下所有的数据库中 汲及到某个关键词的 所有存储过程及自定义函数
- 用sql语句导出oracle中的存储过程和函数