加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.ikongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL存储过程入门学习

发布时间:2022-10-15 16:09:25 所属栏目:MsSql教程 来源:
导读:  2楼

  总金额=订金*订数,临时表放在存储过程中

  代码如下:

  Createproctemp_sale

  as

  selecta.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数*b.客户订金as总金额
  2楼
 
  总金额=订金*订数,临时表放在存储过程中
 
  代码如下:
 
  Createproctemp_sale
 
  as
 
  selecta.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数*b.客户订金as总金额
 
  into#temptablefromProductainnerjoinorderbona.产品编号=b.产品编号
 
  if@@error=0
 
  print'Good'
 
  else
 
  print'Fail'
 
  go
 
  三、SQL存储过程学习:存储过程的调用
 
  调用带参数存储过程的几种方式
 
  1)这也是最简单的方法,两个输入参数,无返回值,用于Insert,Update,Delete操作较多。
 
  以下为引用的内容:
 
  conn.Execute"procnamevarvalue1,varvalue2"
 
  2)如果要返回Recordset集:
 
  以下为引用的内容:
 
  setrs=server.createobject("adodb.recordset")
 
  rs.Open"Execprocnamevarvalue1,varvalue2",conn
 
  3)以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
 
  首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。
 
  四、特殊的存储过程-触发器
 
  1.触发器的概念及作用
 
  触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程 名字而被直接调用。当对某一表进行诸如Update、Insert、Delete这些操作时,SQLServer就会自动执行触发器所定义的 SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。
 
  触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:
 
  (1)强化约束(Enforcerestriction)
 
  触发器能够实现比CHECK语句更为复杂的约束。
 
  (2)跟踪变化Auditingchanges
 
  触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
 
  (3)级联运行(Cascadedoperation)。
 
  触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除Mssq存储过程,更新,插入)而该操作又导致该表上触发器被触发。
 
  (4)存储过程的调用(Storedprocedureinvocation)。
 
  为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。
 
  由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状 态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(Insert、Update、Delete)的多个触发器能够对同一种数据操作 采取多种不同的处理。
 
  总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。
 
  2.触发器的种类
 
  SQLServer2000支持两种类型的触发器:AFTER触发器和INSTEADOF触发器。其中AFTER触发器即为 SQLServer2000版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(InsertUpdateDelete)之后,触发 器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通 常使用系统过程sp_settriggerorder来完成此任务。
 
  INSTEADOF触发器表示并不执行其所定义的操作(Insert、Update、Delete),而仅是执行触发器本身。既可在 表上定义INSTEADOF触发器,也可以在视图上定义INSTEADOF触发器,但对同一操作只能定义一个INSTEADOF触发器。
 

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!