`
viwo
  • 浏览: 221646 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

通过一个实际的例子学习SQLServer存储过程

阅读更多
前面写过一篇 通过一个实际的例子学习Oracle存储过程,现在再来一篇 通过一个实际的例子学习SQLServer存储过程。
所谓应用而学。
  1. --定义存储过程   
  2. CREATE PROCEDURE  xxxxxxxx_p   
  3.  (   
  4.   --传递参数   
  5.   @ym   char(6)   
  6.  )   
  7. As  
  8.   --定义变量,@xx表示局部变量,@@xx表示全局变量。定义多个变量用","号分割   
  9.  declare @ym_ln char(6)   
  10.  declare @cpcode char(10),   
  11.   @cpname char(50),   
  12.   @swcode char(10),   
  13.   @swname char(50),   
  14.   @czgscode char(10),   
  15.   @czgscode_ char(10),   
  16.   @czgsname char(50),   
  17.   @qylx char(2),   
  18.   @qyxz char(30)   
  19.  declare @tdcode char(10),   
  20.   @sb_amt numeric,   
  21.   @sb_ln_amt numeric,   
  22.   @sh_amt numeric,   
  23.   @sh_ln_amt numeric,   
  24.   @ts_amt numeric,   
  25.   @ts_ln_amt numeric  
  26.  declare @ybmy numeric(12,6),   
  27.   @jljg numeric(12,6),   
  28.   @other numeric(12,6),   
  29.   @ybmy_ln numeric(12,6),   
  30.   @jljg_ln numeric(12,6),   
  31.   @other_ln numeric(12,6)   
  32.  declare @rowcount int  
  33.  --删除表中现有符合ym=@ym的数据   
  34.  delete from cs_xxxxxxxx where ym=@ym   
  35.   --给变量赋初值,用到了cast,substring函数。cast用于类型转换,substring用户截取字符串   
  36.  set @ym_ln=cast((substring(@ym,1,4)-1) as char(4)) +substring(@ym,5,2)   
  37.  --声明一个游标   
  38.  declare cur_xxxx cursor for    
  39.   select cpcode.code as cpcode ,cpcode.name as cpname ,cpcode.swcode as swcode,swcode.name  
  40.   as swname,cs_swcode_czgs.czgs as czgscode,cpcode.qylx as qylx from cpcode    
  41.   left join cs_swcode_czgs on cpcode.swcode=cs_swcode_czgs.swcode    
  42.   left join swcode on cpcode.swcode=swcode.code where cpcode.swcode<>''    
  43.  --打来游标   
  44.  open cur_xxxx   
  45.  --取游标中第一行记录并且写入变量。   
  46.  fetch next from cur_xxxx    
  47.   into  @cpcode,@cpname,@swcode,@swname,@czgscode,@qylx   
  48.  --当@@fetch_status = 0即取出了有效行时处理,用到了while语句,结构while xx begin xxx end   
  49.  while @@fetch_status = 0   
  50.  begin  
  51.   --用select语句给变量赋值   
  52.   select @czgscode_=czgs from cs_cpcode_czgs where cpcode=@cpcode   
  53.   --if语句,完整结构if xx begin xxx end   
  54.   if @czgscode_ is not null  
  55.    set @czgscode=@czgscode_   
  56.   select @czgsname=name from cs_czgs where code=@czgscode   
  57.   --if else结构,完整结构 if xx begin xxx else xxxx end   
  58.   if @qylx='11'   
  59.    set @qyxz='内资企业'   
  60.   else  
  61.    set @qyxz='外商投资企业'   
  62.   --用select语句给变量赋值,用到了isnull函数。   
  63.   select @sb_amt=isnull(sum(mdtse),0) from mdtsb where sb_ym=@ym and cpcode=@cpcode   
  64.   select @sb_ln_amt=isnull(sum(mdtse),0) from mdtsb where sb_ym=@ym_ln and cpcode=@cpcode   
  65.   --   
  66.   --省略n行类似赋值语句   
  67.   --   
  68.   --goto语句,跳转到insertmodule   
  69.   goto insertmodule   
  70.    --   
  71.   --省略n行同类处理语句   
  72.   --   
  73. insertmodule:   
  74.   --用is null表达式判断是否为null   
  75.   if @sb_amt      is null set @sb_amt    =0           
  76.   if @sb_ln_amt    is null set @sb_ln_amt   =0              
  77.   if @sh_amt      is null set @sh_amt    =0           
  78.   if @sh_ln_amt    is null set @sh_ln_amt   =0              
  79.   if @ts_amt      is null set @ts_amt    =0           
  80.   if @ts_ln_amt     is null set @ts_ln_amt   =0     
  81.   --插入一般贸易   
  82.     select @ybmy=zb from cs_scqybl where tdcode='一般贸易' and ym=@ym and cpcode=@cpcode   
  83.     select @ybmy_ln=zb from cs_scqybl where tdcode='一般贸易' and ym=@ym_ln and cpcode=@cpcode   
  84.     if @ybmy is null  
  85.      begin  
  86.       --在存储过程中执行存储过程   
  87.       exec xxxbl @cpcode,@ym   
  88.      end  
  89.     if @ybmy_ln is null  
  90.      begin  
  91.       exec xxxxbl @cpcode,@ym_ln   
  92.      end  
  93.     select @jljg=zb from cs_scqybl where tdcode='进料加工' and ym=@ym and cpcode=@cpcode   
  94.     select @jljg_ln=zb from cs_scqybl where tdcode='进料加工' and ym=@ym_ln and cpcode=@cpcode   
  95.     select @other=zb from cs_scqybl where tdcode='其他' and ym=@ym and cpcode=@cpcode   
  96.     select @other_ln=zb from cs_scqybl where tdcode='其他' and ym=@ym_ln and cpcode=@cpcode   
  97.   --把上面各个步骤运算得到的值insert进表中cs_xxxxxxxx   
  98.     insert into cs_xxxxxxxx (xx,xxx,xxxx) values(vv,vvv,vvvv )   
  99.   --取取游标中下一行记录并写入变量   
  100.   fetch next from cur_xxxx into  @cpcode,@cpname,@swcode,@swname,@czgscode,@qylx   
  101.  --结束while循环   
  102.  end  
  103.  --关闭游标   
  104.  close cur_xxxx   
  105.  --删除游标   
  106.  deallocate cur_xxxx   
  107. GO   
分享到:
评论
1 楼 gudao8192 2008-07-07  
写得不错,不过还没怎么看懂,继续看!

相关推荐

    学习SQL Server存储过程入门例子详解

    SQL Server 存储过程是数据库管理员和开发人员的必备技能,本文将通过三个简单的例子来详细介绍 SQL Server 存储过程的基本知识。 例 1:简单的存储过程 在这个例子中,我们将创建一个简单的存储过程,用于从 ...

    SQLSERVER存储过程例子

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

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

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

    sqlserver 存储过程 函数 常用知识点

    以下是关于SQL Server存储过程和函数的一些常用知识点: 1. **存储过程(Stored Procedures)**: - **定义**:存储过程是一组预编译的SQL语句,可以接受参数,执行特定任务,如数据查询、更新或插入等。 - **...

    sql server 存储过程100例

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

    存储过程例子

    学习和理解"存储过程例子"和"自定义函数方法"中的内容,对于提升SQL Server数据库开发和管理技能至关重要。通过分析和实践这些示例,你可以掌握如何有效地利用存储过程和自定义函数来解决实际问题,提升数据库应用的...

    sqlserver存储过程入门例子加讲解

    SQL Server存储过程是数据库管理系统中一个非常重要的概念,它是预编译的SQL语句集合,可以执行复杂的数据库操作。...本文档“sqlserver存储过程入门例子加讲解.pdf”将提供具体的实例和详细解释,帮助新手快速上手。

    C#连接sql server 2005的存储过程例子大全.rar

    本压缩包“C#连接sql server 2005的存储过程例子大全.rar”提供了一系列示例,帮助开发者理解和应用C#连接SQL Server 2005进行存储过程操作。 首先,存储过程(Stored Procedure)是预编译的SQL语句集合,存储在...

    MS SQL Server2005存储过程、游标、游标嵌套综合例子

    通过学习和理解这个示例,开发者可以更好地掌握SQL Server 2005中的存储过程和游标技术,从而在实际工作中更高效地处理数据。同时,了解游标嵌套的应用场景和限制,有助于优化代码,避免不必要的性能开销。记住,...

    sqlserver存储过程入门例子加讲解.

    以上示例介绍了SQL Server存储过程的基础创建与调用方法,包括无参存储过程、单参数存储过程、多参数存储过程以及带有输出参数的存储过程。通过这些示例,读者可以了解存储过程的基本语法及其实现方式,为进一步学习...

    sql存储过程PPT

    【存储过程】是SQL Server数据库管理系统中的一个重要特性,它类似于编程语言中的函数,可以执行一系列预定义的SQL语句和管理任务。存储过程能够提高系统的效率、安全性,并且支持模块化程序设计,使得代码重用变得...

    SQL SERVER2000数据库备份和恢复存储过程.rar_SQL 备份_recovery in SQL_sql server

    在提供的文件列表中,"MySQL数据库函数.txt"和"从一个MySQL的例子来学习查询语句.txt"虽然不是SQL Server 2000的内容,但可以作为对比学习,了解不同数据库系统在备份恢复机制上的异同。"数据库查询结果的动态排序....

    SQL server 2005 存储过程100个实例

    本资源"SQL server 2005 存储过程100个实例"是一个面向初学者的实践教程,旨在通过具体的例子帮助学习者深入理解和应用存储过程。 存储过程是预编译的SQL语句集合,可以在服务器端执行,减少了网络传输的开销。在...

    SQL Server存储过程入门案例详解.doc

    SQL Server存储过程是一种预编译的SQL代码集合,它存储在数据库中,允许开发者通过一个单一的调用来执行一系列复杂的数据库操作。存储过程是数据库管理的重要组成部分,它们提供了提高性能、增强安全性和简化代码...

    SQL SERVER中的存储过程和游标的使用大综合

    在"存储过程和游标创建使用大综合"的压缩包文件中,你可以找到更多关于这两个主题的实际例子和练习,帮助你深入理解和掌握SQL Server中存储过程和游标的使用方法。不断学习和实践这些知识,将有助于提升你在数据库...

    java+sqlserver+存储过程

    通过学习《Java存储过程学习必看.doc》和《sqlserver存储过程入门例子加讲解.pdf》,你将能够深入了解如何在Java中有效地使用SQL Server的存储过程,包括参数传递、事务控制、异常处理等高级主题。这两个文档应该...

    SQLSERVER存储过程大总结.doc

    下面是一个简单的存储过程创建和调用的例子: ```sql -- 创建存储过程 CREATE PROCEDURE query_book AS BEGIN SELECT * FROM book; END GO -- 调用存储过程 EXEC query_book; ``` #### 四、存储过程的用途 - **...

    SQLSERVER2000数据库例子

    总的来说,SQL Server 2000的示例数据库为初学者和专业人士提供了一个实践和深化数据库技能的平台,通过这些实例,我们可以深入理解数据库管理系统的核心功能和操作方式,从而在实际工作中更好地应用和管理数据。

    MyBatis连接SQLServer的小例子

    本教程将通过一个小例子,详细介绍如何使用MyBatis连接到SQLServer数据库。 首先,我们需要在项目中引入MyBatis和SQLServer的驱动依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;!-- ...

    wpf链接sql server简单的例子

    **标题与描述解析** ...通过学习这个例子,开发者将能够创建一个简单的WPF应用程序,从SQL Server数据库中检索数据并显示在界面上。对于初学者来说,这是一个很好的起点,可以帮助他们掌握基础的数据库和UI交互技术。

Global site tag (gtag.js) - Google Analytics