zoukankan      html  css  js  c++  java
  • 014.存储过程(sql实例)

    --存储过程--GO--先编译,再执行
    --1.GO:批处理语句,GO之前作为一个批次发送服务器编译执行
    USE master
    GO
    CREATE DATABASE TEST_DB
    GO
    USE TEST_DB
    CREATE TABLE TEST
    (ID INT,NAME VARCHAR(10))
    GO
    INSERT INTO TEST VALUES
    (1,'张清瑞'),
    (2,'柴铭阳')
    GO
    --2.存储过程(PROCEDURE)
    --类似于C#中的方法(封装,重用:编译1次,反复重用)
    --作用:
    -- 用来执行复杂的业务功能
    --优点:
    --<1> 效率高,执行速度快(节省了编译时间)
    --<2> 减少网络流量
    --<3> 安全性高
    --<4> 允许在数据库中实现模块化开发
    --1 sql 1000 (效率高) 一条sql语句只编译一次
    --1 sql 1行 1000次 需要编译1000次,效率低

    --语法 数据库对象
    CREATE PROC [EDURE] name
    @name1 datatype[=默认值] --in 类型参数 默认
    ....
    @name2 datatype OUTPUT --output 向外传值 实现与return相似的功能
    AS --分割存储过程的定义和存储过程体(没有软用)
    过程体--t_sql
    GO
    ---------------------------------------------------------------------案例分析-------------------------------------------------------------------------------------
    --EG1: 无参的存储过程

    --查看销售部(sales)的员工信息
    --先编译,再调用
    CREATE PROCEDURE EmpsInfo
    --无参 不用写参数
    --WITH ENCRYPTION --源代码加密
    AS
    PRINT '销售部(sales)的员工信息如下:'
    SELECT * FROM EMP WHERE
    DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='sales')
    GO

    --执行存储过程
    EXEC EmpsInfo--执行存储过程
    --查看存储过程源代码 :
    exec sp_helptext 'EmpsInfo'

    ALTER PROCEDURE EmpsInfo--修改存储过程/解密
    AS
    PRINT '销售部(sales)的员工信息如下:'
    SELECT * FROM EMP WHERE
    DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='sales')
    GO
    DROP PROCEDURE EmpsInfo--删除存存储过程

    --EG2. 带有in类型参数的存储过程
    --显示任意部门(参数)的员工信息
    CREATE PROCEDURE EmpsInfo
    @name varchar(20) --参数in,只有in类型参数有默认值
    AS
    PRINT @name+'部门的员工信息如下:'
    SELECT * FROM EMP WHERE
    DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME=@name)
    GO
    --执行存储过程有in类型
    EXEC EmpsInfo @name='sales' -----KEY VALUE
    EXEC EmpsInfo 'ACCOUNTING' --按顺序传参
    EXEC EmpsInfo --参数会使用默认值,如果没有默认值会报错

    --EG3.带有输入(in)和输出(output)两种类型参数的存储过程
    --求和 int sum(int a,int b)
    CREATE PROC GetSum
    @a int=0,--in
    @b int=0,
    @sum int output --output输出类型参数
    AS
    SET @sum=@a+@b
    GO

    --执行过程
    --key=value
    DECLARE @s int
    EXEC GetSum @b=10,@a=20,@Sum=@s output
    print @s

    --思考:存储过程中可以有return 语句吗?
    --可以 return 中断过程执行
    --return val,val只能返回的是整数.(退化很少用)

    --练习:编写过程,向一个空的测试表插入任意行的数据.
    --要求,一次插入的数据不能重复
    CREATE TABLE DUMP
    (
    ID int,
    NAME nvarchar(20),
    PRICE money
    )
    CREATE PROC AddData
    @rowNum int=100
    AS
    DECLARE @i int=1
    WHILE(@i<=@rowNum)
    BEGIN
    INSERT INTO DUMP VALUES(@i,NEWID(),@i*0.23+5)
    SET @i+1




    关注90後梦想大师,梦想从未止步.
  • 相关阅读:
    Linked List Cycle leetcode java (链表检测环)
    Remove Duplicates from Sorted List II leetcode java
    Remove Duplicates from Sorted List leetcode java
    Merge Two Sorted Lists leetcode java
    Swap Nodes in Pairs leetcode java
    Median of Two Sorted Array leetcode java
    阿里云最便宜的四种域名注册
    nohup和&后台运行,进程查看及终止
    ipv6转ipv4 NAT64与DNS64基本原理概述
    ros使用pppoe拨号获取ipv6,并且下发IPV6的dns到客户机win7
  • 原文地址:https://www.cnblogs.com/harveylv/p/6326620.html
Copyright © 2011-2022 走看看