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後梦想大师,梦想从未止步.
  • 相关阅读:
    轮子来袭 vJine.Core Orm 之 03_架构分析
    轮子来袭 vJine.Core 之 AppConfig<T>
    C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
    炫酷 2048 完全免费 色彩无线 流畅如飞
    DebugLog 打印方法执行时间
    [转] charles使用教程指南
    Macbook Pro配置PHP开发环境
    基于ubuntu 14搭建nginx+php+mysql环境
    Android Studio -修改LogCat的颜色
    [转]
  • 原文地址:https://www.cnblogs.com/harveylv/p/6326620.html
Copyright © 2011-2022 走看看