zoukankan      html  css  js  c++  java
  • SQL 存储过程

    分支循环逻辑

    begin与end是开始与结束的意思,在这里相当于()。

    declare @Id int =1;
    if(@Id >1)
    begin
       print 'OK'
    end
    else if(@Id >0)
    begin
        set @Id+=10;
       print '0'+@Id
    end

    视图

    优点:

    1.方便,把一些常用并且复杂的代码封装成视图,也是使用的时候直接调用不用那么麻烦。

    2.安全,这些代码是自己写的,调用者无法看到数据库有关信息。

    create view EXView
    as
    (
      select * from Login//Login为一个表明
    )
    select * from EXView
    

    事务

    事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。

    这个就是回滚

    create table UserTable
    (
      UserName nvarchar(50) not null,
      Money decimal not null check(Money>0) 
    )
    insert into UserTable values ('张三',8000);
    insert into UserTable values ('李四',2000);
     select * from UserTable;
    
    begin try
      begin transaction
      update UserTable set Money+=2000 where UserName='张三';
      update UserTable set Money-=2000 where UserName='李四';
      commit transaction
    end try
    begin catch
     rollback transaction 
    end catch 

    存储过程

    存储过程是一组予编译的SQL语句

    它的优点:

    1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。          

    2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。              

    3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。    

    4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。  

    缺点:                

    1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。         

    2.可移植性差   

    由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。 如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

    简单的

     proc是 procedure的简写

    create  procedure a
    as
    begin
       print 'OK'
    end
    
    exec a
    

     复杂点的

    create procedure Text_Proc
     @Shopper nvarchar(50),
     @Store nvarchar(50),
     @Money int,
     @Bool bit output
     as
     begin
        begin try
    	   begin transaction
    	   update UserTable set money-=@Money where UserName=@Shopper;
    	   update UserTable set Money+=@Money where UserName= @Store;	   
    	   commit transaction
    	   set @Bool=1;
    	end try
    	begin catch
    	   rollback transaction
    	   set @Bool=1;
    	end catch
     end
    
     declare @Bool2 bit
    exec Text_Proc  '张三','李四',1000,@Bool2 output
    print @Bool2
    

      

  • 相关阅读:
    二十一、继承,组合
    Python学习笔记(一):命令行界面扫雷(详细)
    九、Spring Cloud 之旅 -- Config 集群配置中心
    八、Spring Cloud 之旅 -- Zuul 微服务集群网关
    ACM搜索专题(BFS,DFS,记忆化搜索等)
    在Java中使用XPath快速优雅的读取XML, JAXB真的是太繁重
    七、Spring Cloud 之旅 -- Hystrix 微服务保护和容错机制
    记录一次网站信息收集的实战
    编程范式总结
    Java 原生API 实现zip和unzip (用文件和响应流两种方式)
  • 原文地址:https://www.cnblogs.com/mvpbest/p/13221507.html
Copyright © 2011-2022 走看看