sql之更新

来源:互联网 发布:帮忙砍价是什么软件 编辑:程序博客网 时间:2024/05/24 11:14

 

USE [DLPtro]
GO
/****** Object:  StoredProcedure [dbo].[Pr_Area_Update]    Script Date: 11/17/2003 20:40:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- 作者:  李海波
-- 建立时间: 2000年5月11日 11:06
-- 功能描述: 更新指定ID的地区信息
-- =============================================
ALTER PROCEDURE [dbo].[Pr_Area_Update]
--参数
@ErrorCode   Varchar(1) Output ,
@Area_ID   int,
@Area_Name   varchar(30),
@Area_Parent_ID  int,
@Area_Encoding  varchar(30),
@Area_AreaLevel_ID int,
@Area_Remark  varchar(500),
@Area_State   int,
@Area_Timestamp  timestamp Output
AS
--判断需要更新的ID是否存在
IF EXISTS (SELECT * FROM B_Area WHERE Area_ID = @Area_ID and Area_State = 1)
BEGIN
 --判断需要名称是否已经使用
 IF NOT EXISTS(SELECT * FROM B_Area WHERE Area_ID <> @Area_ID AND Area_Name = @Area_Name and Area_State = 1)
 BEGIN
  --判断是否当前时间戳
  IF  EXISTS(select * FROM B_Area  WHERE Area_ID = @Area_ID and Area_Timestamp=@Area_Timestamp)
  BEGIN
   --启动事务
   BEGIN TRANSACTION
    --使用错误处理机制
    BEGIN TRY
     UPDATE B_Area
     SET
      Area_Name=@Area_Name
      , Area_ParentID = @Area_Parent_ID
      , Area_Encoding = @Area_Encoding
      , Area_AreaLevel_ID = @Area_AreaLevel_ID
      , Area_Remark = @Area_Remark
      , Area_State = @Area_State
     WHERE Area_ID = @Area_ID
    END TRY
    --处理错误
    BEGIN CATCH
     --回滚数据
     ROLLBACK TRANSACTION
     SELECT @ErrorCode = 'R'
     RETURN 0
    END CATCH
   --Z执行成功 提交事务
   COMMIT TRANSACTION
   SELECT @ErrorCode = 'S'
   RETURN 1
  END
  ELSE
  BEGIN
   select @ErrorCode='Y' --当前值正在修改
   RETURN 4
  END
 END
 --当前名称已经使用
 ELSE
 BEGIN
  SELECT @ErrorCode = 'C'
  RETURN 3
 END
END
--当前ID在数据库中不存在
ELSE
BEGIN
 SELECT @ErrorCode = 'N'
  RETURN 2
END