--存储过程--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

014.存储过程(sql实例)的更多相关文章

  1. 数据库存储过程 — Sql Server

    Mysql.Oracle等主流关系型数据库基本都支持存储过程,这里使用Sql Server为例进行说明. 存储过程的概念: Sql Server存储过程 SQL Server 中的存储过程是由一个或多 ...

  2. MySQL存储过程使用实例详解

    本文介绍关于在MySQL存储过程游标使用实例,包括简单游标使用与游标循环跳出等方法 例1.一个简单存储过程游标实例 DROP PROCEDURE IF EXISTS getUserInfo $$CRE ...

  3. 教你管理SQL实例系列(1-15)

    全系列转自:51CTO ->jimshu http://jimshu.blog.51cto.com 目录及原本连接如下: 教你管理SQL实例(1)数据库实例 教你管理SQL实例(2)服务启动帐户 ...

  4. 搜索本地网络内所有可用的SQl实例

    '搜索本地网络内所有可用的SQl实例 Dim instance As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance Dim dt ...

  5. 存储过程系列之存储过程sql数据库调用和程序代码调用

    1.存储过程,无参数的存储过程 创建无参数存储存储过程 Create Procedure DCEMREMR_TEMPLATEAs SELECT TOP 10 [FILENAME],[FILETITLE ...

  6. 一次性删除数据库所有表和所有存储过程 SQL语句

    一次性删除数据库所有表和所有存储过程 SQL语句 今天转移数据库数据,需要把数据库原来的表和存储过程清空.删除所有的表:如果由于外键约束删除table失败,则先删除所有约束: --/第1步****** ...

  7. Web Services调用存储过程简单实例

    转:http://www.cnblogs.com/jasenkin/archive/2010/03/02/1676634.html Web Services 主要利用 HTTP 和 SOAP 协议使商 ...

  8. 学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户

    通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123  AS SYSDBA 账户名:sys:密码:123:作 ...

  9. 使用CompletionService结合ExecutorService批处理调用存储过程任务实例

    此实例为java多线程并发调用存储过程实例,只做代码记载,不做详细描述 1.线程池构造初始化类CommonExecutorService.java package com.pupeiyuan.go; ...

随机推荐

  1. Lua中用table统一管理需要获取的unity物体

    unity上的组件,可以用table统一管理 然后在初始化时候统一给table赋值,这样需要用到时候直接调用table中对应的key便可拿到对应的物体,省下了在脚本开头一堆声明的脚本,这样就不用声明这 ...

  2. How To Use Rocketbots As A Dialogflow CRM

    Ever wished you had a CRM for Dialogflow? We did too, so we built one. This is a best practices arti ...

  3. Linux进程批量管理工具

    在使用docker容器时,可以有单机的docker-compose批量编排工具,甚至还有集群的k8s之类编排工具,那么在Linux系统中同样也有相关的批量管理进程的工具,其中使用最多的应该就是supe ...

  4. 金士顿U盘PS2251-07东芝闪存白片量产CDROM成功教程-群联量产教程-U盘量产网

    之前我们发布过金士顿DT100 G3的黑片量产工具教程,因为白片的MPALL量产工具无法量产,所有版本的Phison_MPALL都爆红,最近出了新的白片MPALL V5.03.0A版本,所以试了一下结 ...

  5. 如何使用thymeleaf显示控制传递过来的数据

    实例 <p th:text="'Hello, ' + ${name} + '!'" /> name为要显示的参数名

  6. postMessage 实现跨域消息传递 (JS)

    简单记录一下 postMessage ,证明我来过, 我搞过(frame框架), 以后还能有个解决方法好去度娘: 1.发送消息 postMessage('test', 'http://localhos ...

  7. ssh出现公钥错误问题的解决方法

      问题:主机app1推送公钥时,公钥判定错误   原因:之前推过公钥,用的是ip而不是主机名(即hosts文件中的对应关系不对),导致app1的~/.ssh/known_hosts中的公钥对不上. ...

  8. java中拦截器与过滤器之间的区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  9. Kubernetes组件-ReplicaSet

    ⒈简介 最初,ReplicationController是Kubernetes用于复制和在异常时重新调度节点的唯一组件,后来Kubernetes又引入了一个名为ReplicaSet的类似资源.它是新一 ...

  10. jsp获取Session中的值

    摘要:这个问题算是老生常谈了,我也是一段时间没弄过了,所以感觉有些忘了,就记录一下. 一.后端通过shiro在session中存储数据: // username是前台传过来的用户名 if (subje ...