`
uule
  • 浏览: 6359656 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

【例子】SQL-Server存储过程示例

 
阅读更多

1、主过程proc_insert_cmdb_main

-- =============================================
-- Author:		
-- Create date: 2014/3/5
-- Description:	变更管理更新CMDB 主存储过程
-- =============================================
ALTER PROCEDURE [dbo].[proc_insert_cmdb_main] 
	@CI_ORDER_HEAD_ID VARCHAR(50)='',
    @FLAG CHAR(1) = 'N' output
AS
   declare @RESULT1  VARCHAR(200)
   declare @sql1  VARCHAR(200)

   declare @CI_ORDER_LINE_ID DECIMAL 
   declare @CI_ID DECIMAL 

   declare @CI_CODE VARCHAR(100)
   declare @CI_NAME VARCHAR(500) 
   declare @CATEGORY_CODE VARCHAR(50)
   declare @FN_7 DECIMAL
   declare @FN_8 DECIMAL 
   declare @sql2  VARCHAR(200) /*执行的SQL语句*/
   
   declare @num int 
   declare @countnum int
	 
BEGIN

	SET NOCOUNT ON;
   set @RESULT1 = ''
   set @sql1 = ''

   set @CI_ORDER_LINE_ID = 0
   set @CI_ID  = 0

   set @CI_CODE= ''
   set @CI_NAME= ''
   set @CATEGORY_CODE = ''
   set @FN_7 = 0
   set @FN_8 = 0
   set @sql2 = ''  /*执行的SQL语句*/
   
   set  @num = 0
   set  @countnum = 1
/*============================================================
  生成唯一的CI_CODE:CI_CODE=行表catagery_code+CI_ORDER_LINE_ID
  ============================================================*/
   set @sql1='update T_CI_ORDER_LOGICAL set CI_CODE = CATEGORY_CODE+convert(varchar(18),CI_ORDER_LINE_ID) where CI_ORDER_HEAD_ID='+@CI_ORDER_HEAD_ID
   exec (@sql1)
   set @sql1='update T_CI_ORDER_APPLICATION set CI_CODE = CATEGORY_CODE+convert(varchar(18),CI_ORDER_LINE_ID) where CI_ORDER_HEAD_ID='+@CI_ORDER_HEAD_ID
   exec (@sql1)
   set @sql1='update T_CI_ORDER_PHYSICAL set CI_CODE = CATEGORY_CODE+convert(varchar(18),CI_ORDER_LINE_ID) where CI_ORDER_HEAD_ID='+@CI_ORDER_HEAD_ID
   exec (@sql1)

/*=============================================================
逐个获取更新的配置项条目(行表记录),并调用子存储过程proc_insert_cmdb 逐一处理
===============================================================*/

   select  @countnum = count(*) from T_ORDERCONFIGFORM_V where CI_ORDER_HEAD_ID=@CI_ORDER_HEAD_ID
   if @countnum=0   set @FLAG='Y'
  /*进行数据更新操作*/
  DECLARE MyCursor1 CURSOR LOCAL FORWARD_ONLY for select CI_ORDER_LINE_ID,CI_ID,CI_CODE,CI_NAME,CATEGORY_CODE,FN_7,FN_8 from T_ORDERCONFIGFORM_V where  CI_ORDER_HEAD_ID=@CI_ORDER_HEAD_ID
  
  OPEN MyCursor1 FETCH NEXT FROM MyCursor1 INTO @CI_ORDER_LINE_ID,@CI_ID,@CI_CODE,@CI_NAME,@CATEGORY_CODE,@FN_7,@FN_8

   WHILE @@FETCH_STATUS = 0 
	  BEGIN
	   	/*set @RESULT1 = convert(varchar(18),@CI_ORDER_LINE_ID)+convert(varchar(18),isnull(@CI_ID,0))+@CI_CODE+@CATEGORY_CODE+convert(varchar(18),isnull(@FN_7,0))*/
       /* print('检测点')*/
			 /* 执行数据写入操作 */
		  EXEC proc_insert_cmdb @CI_ORDER_HEAD_ID,@CATEGORY_CODE,@CI_ORDER_LINE_ID,@CI_ID,@CI_CODE,@CI_NAME,@FN_7,@FN_8,@FLAG OUTPUT 
      FETCH NEXT FROM MyCursor1 INTO @CI_ORDER_LINE_ID,@CI_ID,@CI_CODE,@CI_NAME,@CATEGORY_CODE,@FN_7,@FN_8
    END
  CLOSE MyCursor1
  DEALLOCATE MyCursor1 
END

 

2、子过程proc_insert_cmdb

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[proc_insert_cmdb] 
	@CI_ORDER_HEAD_ID VARCHAR(50) = '',
	@CATEGORY_CODE CHAR(50) = '',
	@ORDER_LINE_ID  VARCHAR(20) = '',
	@CI_ID DECIMAL = 0,
	@CI_CODE VARCHAR(100) = '',
	@CI_NAME VARCHAR(100) = '',
	@FN_7 DECIMAL = 0,
	@FN_8 DECIMAL = 0,
	@FLAG CHAR(1) = 'N' output
AS
	declare @CATEGORY_CI_TABLENAME VARCHAR(50)
	declare @result VARCHAR(2000)
	declare @result_from VARCHAR(2000)
	declare @result_to VARCHAR(2000) 

	declare @ATTRIBUTE1 VARCHAR(50)
	declare @ATTRIBUTE2 VARCHAR(50)
	declare @ATTRIBUTE3 VARCHAR(50) 
   
	declare @S_TEMP VARCHAR(500) 
	declare @RECORD_VERSION DECIMAL(18,2)
	declare @CI_ORDER_CODE VARCHAR(500)
	declare @countnum_temp int
BEGIN

	SET NOCOUNT ON;
	set @CATEGORY_CI_TABLENAME =''
	set @result = ''
	set @result_from = ''
	set @result_to = ''

	set @ATTRIBUTE1  =''
	set @ATTRIBUTE2 =''
	set @ATTRIBUTE3  =''

	set @S_TEMP  =''
	set @RECORD_VERSION=0
	set @CI_ORDER_CODE=''
	set @countnum_temp =0
	
/*================================
预处理1:获取行表的配置参数
=================================*/
select @CATEGORY_CI_TABLENAME = CATEGORY_CI_TABLENAME,@ATTRIBUTE1=ATTRIBUTE1,@ATTRIBUTE2=ATTRIBUTE2,@ATTRIBUTE3=ATTRIBUTE3 from T_CI_CATEGORY where  CATEGORY_CODE= @CATEGORY_CODE

/*================================
预处理:获取行表的更新sql   赋值给 @result
=================================*/


IF  (@ATTRIBUTE2='A')
  begin
    set @result=(select  ATTRIBUTE_CONFIG_CODE FROM T_ATTRIBUTE_CONFIG 
                 where category_code=@CATEGORY_CODE  and CMDB_UPDATE_FLAG='Y' for xml path(''))
    if LEN(@result)>0
       begin
           set @result_to=REPLACE( @result, '</ATTRIBUTE_CONFIG_CODE><ATTRIBUTE_CONFIG_CODE>',',') 
           set @result_to=REPLACE( @result_to, '<ATTRIBUTE_CONFIG_CODE>','') 
           set @result_to=REPLACE( @result_to, '</ATTRIBUTE_CONFIG_CODE>','') 
    
           set @result_from=REPLACE( @result_to, 'CREATED_DATE','getDate()') 
           set @result_from=REPLACE( @result_from, 'CATEGORY_CODE',''''+@ATTRIBUTE3+'''') 
           set @result_from=REPLACE( @result_from, 'LAST_UPDATE_DATE','getDate()') 
           set @result_from=REPLACE( @result_from, 'RECORD_VERSION','1') 
           set @result_from=case
                when substring (@CATEGORY_CODE, 1 , 13)='ORDER_ONSHELF' 
                    then REPLACE(REPLACE( @result_from, 'GROUNDING_DATE','getDate()') ,'GUARANTEE_DATE','dateadd(year,FN_10,BUY_DATE)')
                when substring (@CATEGORY_CODE, 1 , 12)='ORDER_ONLINE' 
                   then REPLACE( @result_from, 'ON_LINE_DATE','getDate()')         
                else @result_from
                END
           set @result = 'insert into ' + @ATTRIBUTE1 + '(' + @result_to +') select '+ @result_from +' from '+@CATEGORY_CI_TABLENAME +' where CI_ORDER_LINE_ID='+@ORDER_LINE_ID

        end
  end
  else if (@ATTRIBUTE2='U')
  begin
        set @result=(select  ATTRIBUTE_CONFIG_CODE+'=b.'+ATTRIBUTE_CONFIG_CODE+',' FROM T_ATTRIBUTE_CONFIG 
                 where category_code=@CATEGORY_CODE  and CMDB_UPDATE_FLAG='Y' for xml path(''))
       /* PRINT('TT'+@result)*/
        if len(@result)>0 
           begin
               set @result=substring(@result,1,LEN(@result)-1)
               set @result=REPLACE( @result, 'LAST_UPDATE_DATE=b.LAST_UPDATE_DATE','LAST_UPDATE_DATE=getDate()') 
               set @result=case 
                   when  substring(@CATEGORY_CODE,1, 14)='ORDER_OFFSHELF'
                        then REPLACE( @result, 'UNDER_DATE=b.UNDER_DATE','UNDER_DATE=getDate()') 
                   when  substring (@CATEGORY_CODE, 1 , 12)='ORDER_ONLINE' 
                        then REPLACE( @result, 'ON_LINE_DATE=b.ON_LINE_DATE','ON_LINE_DATE=getDate()') 
                   when  substring (@CATEGORY_CODE, 1 , 13)='ORDER_OFFLINE' 
                        then REPLACE( @result, 'OFF_LINE_DATE=b.OFF_LINE_DATE','OFF_LINE_DATE=getDate()')                         
                   else @result
                   end
                  
                set @result = 'update '+ @ATTRIBUTE1 +' set '+ @result + ' from '+@ATTRIBUTE1 + ' a,'+@CATEGORY_CI_TABLENAME +' b where a.ci_id=b.ci_id and b.CI_ORDER_LINE_ID='+@ORDER_LINE_ID

           end
				
  end

/*
 print ('参数: @CATEGORY_CODE='+@CATEGORY_CODE+'  @ORDER_LINE_ID='+@ORDER_LINE_ID +'    @CI_NAME='+@CI_NAME) 
 print ('参数CI_ID:   @CI_ID=:'+convert(varchar(18),@CI_ID) ) 
 print('行表@result='+@result) 
 print('断点2')*/
/*================================================
开启事务
==================================================*/

BEGIN TRANSACTION
BEGIN TRY
 --print('行表@result='+@result)
 /*==============================================
 执行语句1: 更新行表数据更新sql
 @result
 ================================================*/
 if  len(@result)>0
   begin
      exec (@result)
      
       /*特殊处理:*/      
      if (@ATTRIBUTE2='U') 
          begin
               /*设备下线时清除设备上线时的配置数据*/    
              if @CATEGORY_CODE='ORDER_OFFLINE_SERVER'
                   begin
                      set @result = 'update '+ @ATTRIBUTE1 +' set RECORD_VERSION=RECORD_VERSION+1,USE_OBJECTIVE=null,FV_3=null,
                                 FV_6=null,FV_7=null,FV_8=null,FV_9=null,FV_10=null,FV_11=null,FV_12=null,FV_13=null,FV_14=null,
                                 FV_20=null,FV_22=null,FN_4=null,FN_5=null,FN_6=null where ci_id='+ltrim(convert(varchar(18),@CI_ID))
                      --print('1'+@result)
                      exec (@result)
                   end
              else
                /*处理记录版本号*/
                   begin
                      
                      set @result = 'update '+ @ATTRIBUTE1 +' set RECORD_VERSION=RECORD_VERSION+1 where USE_STATUS not in (''Canceled'') and ci_id='+ltrim(convert(varchar(18),@CI_ID))
 --print('1'+@result)
                      exec (@result)
                   end
          end
      
   end


/*================================================================
执行语句2: 1.获取新增配置项CI_ID给@CI_ID
           2.对于新增的配置项,向行表回写CI_ID
==============================================================*/
set @result=''

IF (@ATTRIBUTE2='A')
	begin
	  /*
	   set @result='SELECT @a=CI_ID FROM '+ @ATTRIBUTE1 +' WHERE CI_NAME='''+@CI_NAME+''''  
       print ('  @result='+@result) 
	   exec sp_executesql @result,N'@a int output',@CI_ID output 
       print ('参数CI_ID:   @CI_ID=:'+convert(varchar(18),@CI_ID)) 
  */
  	IF @CATEGORY_CODE='ORDER_ONLINE_VM' or @CATEGORY_CODE='ORDER_ONLINE_LEASEDLINE' 
	        SELECT @CI_ID=CI_ID FROM T_CI_LOGICAL WHERE CI_CODE=@CI_CODE
	ELSE IF SUBSTRING(@CATEGORY_CODE,1,16)='ORDER_ONLINE_APP'
	        SELECT @CI_ID=CI_ID FROM T_CI_APPLICATION WHERE CI_CODE=@CI_CODE
	ELSE IF SUBSTRING(@CATEGORY_CODE,1,13)='ORDER_ONSHELF'
	         SELECT @CI_ID=CI_ID FROM T_CI_PHYSICAL WHERE CI_CODE=@CI_CODE
  
  
  	   set @result = 'update '+@CATEGORY_CI_TABLENAME +' set CI_ID='+Ltrim(convert(varchar(18),@CI_ID))+',CI_CODE='''+@ATTRIBUTE3+'_'+Ltrim(convert(varchar(18),@CI_ID))+''' WHERE (CI_ORDER_LINE_ID='''+@ORDER_LINE_ID+''')'
       /*print('A-IP配置更新:'+@result)*/
		exec (@result)
  	   set @result = 'update '+@ATTRIBUTE1 +' set CI_CODE='''+@ATTRIBUTE3+'_'+Ltrim(convert(varchar(18),@CI_ID))+''' WHERE (CI_CODE='''+@CI_CODE+''')'
	    exec (@result)
	end

    /*print ('参数fn8:   @CI_ID=:'+convert(varchar(18),@FN_8)) 
	print ('参数CI_ID:   @CI_ID=:'+convert(varchar(18),@CI_ID)) */
	--print('断点3')
/*================================================================
执行语句3: 更新关联表
           1. 虚拟机上线/应用上线:增加关系,更新相关配置项状态   (1)虚拟机关联服务器V_S (2)应用关联虚拟机A_V
           2. 虚拟机下线/应用下线:注销关系,更新相关配置项状态

==============================================================*/
SET @countnum_temp=0
select @CI_ORDER_CODE=CI_ORDER_CODE  from T_CI_ORDER_HEAD where CI_ORDER_HEAD_ID=@CI_ORDER_HEAD_ID
IF @CATEGORY_CODE='ORDER_ONLINE_VM' 
         BEGIN
		     INSERT INTO T_CI_RELATIONSHIP (CI_PHYSICAL_ID,CI_LOGICAL_ID,CI_RELATIONSHIP,DELETED_FLAG) VALUES(@FN_7,@CI_ID,'V_S','N')
		     SELECT @S_TEMP=USE_STATUS FROM T_CI_PHYSICAL WHERE CI_ID=@FN_7
		     
		     IF @S_TEMP='Idle' 
		        BEGIN
		           select @RECORD_VERSION=RECORD_VERSION FROM T_CI_PHYSICAL WHERE CI_ID=@FN_7
		           UPDATE T_CI_PHYSICAL SET USE_STATUS='Using',LAST_UPDATE_DATE=getDate(),RECORD_VERSION=RECORD_VERSION+0.01 WHERE CI_ID=@FN_7
 			       /*插入日志*/ 			       
 			       INSERT INTO T_CI_UPDATE_LOG(TABLE_NAME,MASTER_FLAG,CATEGORY_CODE,CI_ID,CI_BATCH_ID,UPDATE_NAME,UPDATE_BEFORE_NAME,UPDATE_BEFORE_VALUE,UPDATE_AFTER_NAME,UPDATE_AFTER_VALUE,UPDATE_FLAG,DESCRIPTION,CREATED_BY,CREATED_DATE)
			     	   VALUES('T_CI_PHYSICAL','Y','CMDB_SERVER',@FN_7,@RECORD_VERSION+0.01,'USE_STATUS','空闲','Idle','使用','Using','U',
				          '虚拟机上线表单编号='+@CI_ORDER_CODE,'PROGRAM',GETDATE())
                END
               
         END

     ELSE IF @CATEGORY_CODE='ORDER_OFFLINE_VM' 
         BEGIN
             select @FN_7=FN_7 from T_CI_LOGICAL where CI_ID=@CI_ID
             delete from T_CI_RELATIONSHIP WHERE CI_LOGICAL_ID=@CI_ID AND CI_PHYSICAL_ID=@FN_7
             SELECT @countnum_temp=COUNT(RELATIONSHIP_ID) FROM T_CI_RELATIONSHIP WHERE CI_PHYSICAL_ID=@FN_7 AND DELETED_FLAG='N' 
                                  AND ((CASE WHEN CI_LOGICAL_ID=NULL THEN 0 ELSE CI_LOGICAL_ID END)>0 OR (CASE WHEN CI_APPLICATION_ID=NULL THEN 0 ELSE CI_APPLICATION_ID END)>0)
			 IF @countnum_temp=0 
			    begin
			       select @RECORD_VERSION=RECORD_VERSION FROM T_CI_PHYSICAL WHERE CI_ID=@FN_7
			       UPDATE T_CI_PHYSICAL SET USE_STATUS='Idle',LAST_UPDATE_DATE=getDate(),RECORD_VERSION=RECORD_VERSION+0.01 WHERE CI_ID=@FN_7
                   /*插入日志*/ 			       
				   INSERT INTO T_CI_UPDATE_LOG(TABLE_NAME,MASTER_FLAG,CATEGORY_CODE,CI_ID,CI_BATCH_ID,UPDATE_NAME,UPDATE_BEFORE_NAME,UPDATE_BEFORE_VALUE,UPDATE_AFTER_NAME,UPDATE_AFTER_VALUE,UPDATE_FLAG,DESCRIPTION,CREATED_BY,CREATED_DATE)
				        VALUES('T_CI_PHYSICAL','Y','CMDB_SERVER',@FN_7,@RECORD_VERSION+0.01,'USE_STATUS','使用','Using','空闲','Idle','U',
			                         '虚拟机下线表单编号='+@CI_ORDER_CODE,'PROGRAM',GETDATE())
			    end	                         
         END 
     ELSE IF SUBSTRING(@CATEGORY_CODE,1,16)='ORDER_ONLINE_APP'
         BEGIN         
		    INSERT INTO T_CI_RELATIONSHIP (CI_LOGICAL_ID,CI_APPLICATION_ID,CI_RELATIONSHIP,DELETED_FLAG) VALUES(@FN_8,@CI_ID,'A_V','N')
		    SELECT @S_TEMP=USE_STATUS FROM T_CI_LOGICAL WHERE CI_ID=@FN_8
		    IF @S_TEMP='Idle' 
		        BEGIN
		           select @RECORD_VERSION=RECORD_VERSION FROM T_CI_LOGICAL WHERE CI_ID=@FN_8		        
			       UPDATE T_CI_LOGICAL SET USE_STATUS='Using',LAST_UPDATE_DATE=getDate(),RECORD_VERSION=RECORD_VERSION+0.01 WHERE CI_ID=@FN_8
                   /*插入日志*/
			       INSERT INTO T_CI_UPDATE_LOG(TABLE_NAME,MASTER_FLAG,CATEGORY_CODE,CI_ID,CI_BATCH_ID,UPDATE_NAME,UPDATE_BEFORE_NAME,UPDATE_BEFORE_VALUE,UPDATE_AFTER_NAME,UPDATE_AFTER_VALUE,UPDATE_FLAG,DESCRIPTION,CREATED_BY,CREATED_DATE)
				       VALUES('T_CI_LOGICAL','Y','CMDB_VM',@FN_8,@RECORD_VERSION+0.01,'USE_STATUS','空闲','Idle','使用','Using','U',
				       '应用上线表单编号='+@CI_ORDER_CODE,'PROGRAM',GETDATE())
                END
         END         

     ELSE IF SUBSTRING(@CATEGORY_CODE,1,17) ='ORDER_OFFLINE_APP' 
         BEGIN
             select @FN_8=FN_8 from T_CI_APPLICATION where CI_ID=@CI_ID
             delete from T_CI_RELATIONSHIP WHERE CI_APPLICATION_ID=@CI_ID AND CI_LOGICAL_ID=@FN_8
             SELECT @countnum_temp=COUNT(RELATIONSHIP_ID) FROM T_CI_RELATIONSHIP WHERE CI_LOGICAL_ID=@FN_8 AND DELETED_FLAG='N' 
                      AND (CASE WHEN CI_APPLICATION_ID=NULL THEN 0 ELSE CI_APPLICATION_ID END)>0
             IF @countnum_temp=0
                  BEGIN  
                        select @RECORD_VERSION=RECORD_VERSION FROM T_CI_LOGICAL WHERE CI_ID=@FN_8	
             			UPDATE T_CI_LOGICAL SET USE_STATUS='Idle',LAST_UPDATE_DATE=getDate(),RECORD_VERSION=RECORD_VERSION+0.01 WHERE CI_ID=@FN_8
                        /*插入日志*/ 			            				                         
				        INSERT INTO T_CI_UPDATE_LOG(TABLE_NAME,MASTER_FLAG,CATEGORY_CODE,CI_ID,CI_BATCH_ID,UPDATE_NAME,UPDATE_BEFORE_NAME,UPDATE_BEFORE_VALUE,UPDATE_AFTER_NAME,UPDATE_AFTER_VALUE,UPDATE_FLAG,DESCRIPTION,CREATED_BY,CREATED_DATE)
				               VALUES('T_CI_LOGICAL','Y','CMDB_VM',@FN_8,@RECORD_VERSION+0.01,'USE_STATUS','使用','Using','空闲','Idle','U',
				                        '应用下线表单编号='+@CI_ORDER_CODE,'PROGRAM',GETDATE())
				  END

         END 
--print('断点4')
/*==============================================================================
执行语句4:更新IP配置信息T_CI_FOLLOW_TABLE,更新规则
          1.变更配置项的IP配置数据更新规则:先删除'DELETE'',''UPDATE'两类数据,再增加'INSERT'',''UPDATE'两类数据
          2.特殊处理:(1)服务器下线时删除IP配置数据 (2)虚拟机下线、专线下线、设备下架时,注销IP配置数据
================================================================================*/
  
  /*判断是否有IP更新记录*/ 
  set @result=''
  select  @countnum_temp = count(CI_ORDER_LINE_ID) from T_CI_ORDER_FOLLOW_TABLE where CI_ORDER_LINE_ID =@ORDER_LINE_ID and CATEGORY_CODE=@CATEGORY_CODE

  IF (@countnum_temp>0)  /*有*/
     BEGIN
	    /*1.删除'update'和'delete'两类数据*/
	    delete from T_CI_FOLLOW_TABLE where FOLLOW_ID IN (select CONVERT(decimal,ATTRIBUTE10) from T_CI_ORDER_FOLLOW_TABLE 
                                  where CI_ORDER_LINE_ID =@ORDER_LINE_ID and CATEGORY_CODE=@CATEGORY_CODE and ATTRIBUTE5 in ('DELETE','UPDATE'))             
	   
	    /*2.插入'update'和'insert'两类数据*/
		insert into T_CI_FOLLOW_TABLE (FOLLOW_CLASS,CATEGORY_CODE,CI_ORDER_LINE_ID,CI_ID,CONNECT_TYPE,SOURCE,TARGET,IP_ADDRESS,IP_NETCODE,IP_GATEWAY,IP_VLAN,IP_PORT,
		DESCRIPTION,CREATED_BY,CREATED_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,DELETED_FLAG,RECORD_VERSION,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,
		ATTRIBUTE4) select FOLLOW_CLASS,ATTRIBUTE6,CI_ORDER_LINE_ID,CASE WHEN CI_ID IS NULL THEN @CI_ID WHEN CI_ID=0 THEN @CI_ID  ELSE CI_ID END ,CONNECT_TYPE,SOURCE,TARGET,IP_ADDRESS,IP_NETCODE,IP_GATEWAY,IP_VLAN,IP_PORT,
		DESCRIPTION,CREATED_BY,CREATED_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,'N',RECORD_VERSION,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,
		ATTRIBUTE4 from T_CI_ORDER_FOLLOW_TABLE  WHERE T_CI_ORDER_FOLLOW_TABLE.CI_ORDER_LINE_ID = @ORDER_LINE_ID and T_CI_ORDER_FOLLOW_TABLE.CATEGORY_CODE=@CATEGORY_CODE and ATTRIBUTE5 IN ('INSERT','UPDATE')
      END
  ELSE 
      BEGIN
         set @result= case
			when @CATEGORY_CODE='ORDER_OFFLINE_SERVER'
				then 'delete from T_CI_FOLLOW_TABLE where  CI_ID='+CONVERT(varchar(100), @CI_ID)
			when @CATEGORY_CODE='ORDER_OFFLINE_VM' OR  @CATEGORY_CODE='ORDER_OFFSHELF_NETWORK' OR  @CATEGORY_CODE='ORDER_OFFLINE_LEASEDLINE' 
				then 'update T_CI_FOLLOW_TABLE set DELETED_FLAG=''Y'' where  CI_ID='+CONVERT(varchar(100), @CI_ID)+' and CATEGORY_CODE='''+@CATEGORY_CODE+''''
	        END  
	     --print('IP注销:'+@result)
  	     if len(@result)>0 exec (@result)  
      END
--print('断点5')
 /*====================
 提交事务 
 ======================*/

  COMMIT
  set @FLAG='Y'
END TRY
BEGIN CATCH
     ROLLBACK
END CATCH 
 
END

 

 

 

分享到:
评论

相关推荐

    SQLSERVER存储过程例子

    以下是针对"SQLSERVER存储过程例子"的详细解释。 1. **存储过程的概念**: 存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。...

    sql-server-2016-samples,SQL SERVER 2016 脚本例子

    例如,SQL Server 2016引入了Always Encrypted技术,可以实现数据在存储和传输过程中的加密,确保数据安全。另外,Query Store是一个新的性能监控工具,它记录查询的历史执行计划和性能数据,帮助管理员诊断性能问题...

    SQL脚本------存储过程分页示例

    本示例将深入探讨如何使用SQL脚本和存储过程来实现分页功能,这对于处理大数据集特别有用。 首先,我们需要了解存储过程。存储过程是预编译的SQL语句集合,它可以视为数据库中的一个可执行对象。通过创建存储过程,...

    SQLServer存储过程中事务的使用方法

    本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久性): 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会留下...

    执行Sqlserver存储过程返回DataSet

    ### 执行SQL Server 存储过程并返回DataSet 在软件开发过程中,经常需要与数据库进行交互,其中一种常见的场景就是通过调用存储过程来获取数据并处理这些数据。本篇文章将详细探讨如何在C#中执行SQL Server的存储...

    SQL-Server-SQL语句大全

    - `sp_configure` 是一个系统存储过程,用于更改 SQL Server 的运行时配置选项。 - 参数 `N'min server memory (MB)'` 指定了要更改的配置项名称。 - 第二个参数 `0` 表示最小服务器内存为0 MB,即不设置最小内存...

    VB-SQL-Server.rar_vb SQL Server

    而SQL Server作为后端数据库,提供了存储、处理和管理大量数据的能力。 一、VB访问SQL Server的常见方法: 1. ADO(ActiveX Data Objects):ADO是Microsoft提供的数据访问接口,它使VB可以直接与SQL Server进行...

    SQLSERVER实用教程- 存储过程和触发器.pdf

    ### SQL Server 存储过程与触发器详解 #### 一、存储过程概述 **存储过程**是在数据库中预编译并存储的一组SQL语句,它可以在SQL Server中执行复杂的数据处理逻辑。存储过程不仅可以提高应用程序的性能,还可以...

    hiberate SQL Server 2000 存储过程.pdf

    标题与描述中的关键词“hibernate SQL Server 2000 存储过程”指出了本文档的主题,即在Hibernate框架下如何与SQL Server 2000的存储过程进行交互。下面将深入探讨这一主题,包括为什么在Hibernate中使用存储过程、...

    sqlserver的存储过程与 where in 多值参数

    在SQL Server中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库操作,提高了代码的重用性和执行效率。当涉及到处理多个值时,我们常常会遇到如何将这些值作为参数传递给存储过程的问题。本文将探讨在SQL ...

    SQL_Server_存储过程_-_hoojo_-_博客园

    根据提供的文件信息,以下是对SQL Server存储过程的相关知识点的详细阐述: ### 存储过程的概念 存储过程(Procedure)是一种预先定义并经过编译的SQL语句集合,它存储于数据库之中,用户可以通过指定存储过程的...

    SQL SERVER数据库开发之存储过程应用.rar

    在SQL Server数据库开发中,存储过程是至关重要的一个部分,它是一种预编译的SQL语句集合,可以被多次调用,以提高数据库操作的效率和安全性。本教程旨在深入探讨存储过程在SQL Server中的应用,帮助开发者更好地...

    sql server调用存储过程

    这个例子定义了一个名为`usp_GetEmployeeDetails`的存储过程,它接收一个参数`@EmployeeID`,并返回对应ID的员工详情。 调用存储过程可以通过`EXEC`关键字完成: ```sql EXEC usp_GetEmployeeDetails 1 ``` 在...

    《SQL-Server数据库技术》试卷C卷答案.docx

    2. **变量与存储过程**:在SQL Server中,`@`符号用于声明局部变量,而`@@`前缀的变量代表系统级别的变量。存储过程是预编译的SQL语句集合,可以接受参数并返回结果,提高性能和代码重用。 3. **数据类型与字符串**...

    sql server 存储过程100例

    通过学习和实践这100多个例子,你将能够熟练地编写、调试和优化SQL Server存储过程,解决各种实际问题。无论是简单的数据操作还是复杂的业务逻辑,存储过程都能为你提供高效、安全的解决方案。所以,不要犹豫,立即...

    《SQL-Server数据库技术》试卷L卷答案.docx

    《SQL-Server数据库技术》试卷L卷主要涵盖了SQL Server数据库的基础知识,包括数据操作、数据库设计、完整性约束、存储过程和视图等核心概念。以下是根据试卷内容解析的知识点: 1. **选择、投影和连接**:这是SQL...

    Java中调用SQL Server存储过程

    在Java编程环境中,如Eclipse 3.3,与数据库进行交互是常见的需求,而调用SQL Server存储过程是其中一种高效的操作方式。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高性能并降低网络流量。本篇文章...

    sqlserver2005示例数据库

    "sqlserver2005示例数据库"这个压缩包包含的是SQL Server 2005的示例数据库,这些数据库通常用于教学、学习和测试环境,帮助用户了解如何在实际环境中操作和管理数据库。 首先,我们要理解什么是示例数据库。示例...

Global site tag (gtag.js) - Google Analytics