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存储过程例子"的详细解释。 1. **存储过程的概念**: 存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。...
例如,SQL Server 2016引入了Always Encrypted技术,可以实现数据在存储和传输过程中的加密,确保数据安全。另外,Query Store是一个新的性能监控工具,它记录查询的历史执行计划和性能数据,帮助管理员诊断性能问题...
本示例将深入探讨如何使用SQL脚本和存储过程来实现分页功能,这对于处理大数据集特别有用。 首先,我们需要了解存储过程。存储过程是预编译的SQL语句集合,它可以视为数据库中的一个可执行对象。通过创建存储过程,...
本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久性): 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会留下...
### 执行SQL Server 存储过程并返回DataSet 在软件开发过程中,经常需要与数据库进行交互,其中一种常见的场景就是通过调用存储过程来获取数据并处理这些数据。本篇文章将详细探讨如何在C#中执行SQL Server的存储...
- `sp_configure` 是一个系统存储过程,用于更改 SQL Server 的运行时配置选项。 - 参数 `N'min server memory (MB)'` 指定了要更改的配置项名称。 - 第二个参数 `0` 表示最小服务器内存为0 MB,即不设置最小内存...
而SQL Server作为后端数据库,提供了存储、处理和管理大量数据的能力。 一、VB访问SQL Server的常见方法: 1. ADO(ActiveX Data Objects):ADO是Microsoft提供的数据访问接口,它使VB可以直接与SQL Server进行...
### SQL Server 存储过程与触发器详解 #### 一、存储过程概述 **存储过程**是在数据库中预编译并存储的一组SQL语句,它可以在SQL Server中执行复杂的数据处理逻辑。存储过程不仅可以提高应用程序的性能,还可以...
标题与描述中的关键词“hibernate SQL Server 2000 存储过程”指出了本文档的主题,即在Hibernate框架下如何与SQL Server 2000的存储过程进行交互。下面将深入探讨这一主题,包括为什么在Hibernate中使用存储过程、...
在SQL Server中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库操作,提高了代码的重用性和执行效率。当涉及到处理多个值时,我们常常会遇到如何将这些值作为参数传递给存储过程的问题。本文将探讨在SQL ...
根据提供的文件信息,以下是对SQL Server存储过程的相关知识点的详细阐述: ### 存储过程的概念 存储过程(Procedure)是一种预先定义并经过编译的SQL语句集合,它存储于数据库之中,用户可以通过指定存储过程的...
在SQL Server数据库开发中,存储过程是至关重要的一个部分,它是一种预编译的SQL语句集合,可以被多次调用,以提高数据库操作的效率和安全性。本教程旨在深入探讨存储过程在SQL Server中的应用,帮助开发者更好地...
这个例子定义了一个名为`usp_GetEmployeeDetails`的存储过程,它接收一个参数`@EmployeeID`,并返回对应ID的员工详情。 调用存储过程可以通过`EXEC`关键字完成: ```sql EXEC usp_GetEmployeeDetails 1 ``` 在...
2. **变量与存储过程**:在SQL Server中,`@`符号用于声明局部变量,而`@@`前缀的变量代表系统级别的变量。存储过程是预编译的SQL语句集合,可以接受参数并返回结果,提高性能和代码重用。 3. **数据类型与字符串**...
通过学习和实践这100多个例子,你将能够熟练地编写、调试和优化SQL Server存储过程,解决各种实际问题。无论是简单的数据操作还是复杂的业务逻辑,存储过程都能为你提供高效、安全的解决方案。所以,不要犹豫,立即...
《SQL-Server数据库技术》试卷L卷主要涵盖了SQL Server数据库的基础知识,包括数据操作、数据库设计、完整性约束、存储过程和视图等核心概念。以下是根据试卷内容解析的知识点: 1. **选择、投影和连接**:这是SQL...
在Java编程环境中,如Eclipse 3.3,与数据库进行交互是常见的需求,而调用SQL Server存储过程是其中一种高效的操作方式。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高性能并降低网络流量。本篇文章...
"sqlserver2005示例数据库"这个压缩包包含的是SQL Server 2005的示例数据库,这些数据库通常用于教学、学习和测试环境,帮助用户了解如何在实际环境中操作和管理数据库。 首先,我们要理解什么是示例数据库。示例...