SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
存储过程存储过程分为系统存储过程和自定义存储过程存储过程通过将处理数据的程序从客户端应用程序移动到服务器,存储过程是放在服务器上的,通过客户端下达指令调用存储过程的时候,这个过程是在服务器上发生的,自然就不会占用网络的带宽就会降低网络流量。存储过程就是一组为了完成特定功能的T-SQL语句。就是一组语句随时随地拿出来调用。经过编译后,它存储在SQLserver服务器端的数据库中,换句话说这个T-SQL语句不是普通的T-SQL语句,是经过编译的,存储在服务器中,它是有名称的,根据名称调用存储过程,并进行相应的操作,与函数有些相似,但不同。利用存储过程可以加速T-SQL语句的执行。系统存储过程在SQLserver安装之后就以及存储在SQLserver的master数据库中(master数据库里面存储了所有的系统存储过程。在新建数据库的时候它们自动的将这些存储过程赋值到新的数据库中)也就是说创建一个新的数据库存储过程自然就存在了。所有的系统存储过程自然就存在了。系统存储过程是以sp开头的。存储过程通常命名 (附加数据库需要先进行分离,分离后才可继续附加,或者附加的数据库是系统所没有的。)sp_attach_db 附加数据库 exec sp_attach_db @dbname='newlts',@filename1='D:\具体存储路径' \\分离数据库''括号里为数据库名称 sp_detach_db 分离数据库 exec sp_detach_db 'newlts' \\分离数据库''括号里为数据库名称 exec sp_renamedb test,test1 \\给数据库进行改名,test改成test1sp_rename 给对象改名 存储过程是可以有参数的,也可以有返回值的,但和函数并不相同,函数的返回值可以直接调用和赋值。存储过程的返回值只能指明执行是否成功,并且不像函数那样可以直接调用sp_help 显示数据库相关数据 存储过程和函数的概念,过程可以执行操作,但没有返回值。 !!!!!!!存储过程的返回值就是指明执行是否成功。sp_changedbowner 改变数据库所有者 存储过程的优点: 在SQLserver中T-sql可以判做是一种主编程语言,利用它来编程有两种方式:一、在本地存储T-sql程序并创建应用程序,向SQLserver发送命令。 Exec sp_changedbowner '所有者' 二、编写存储过程,并把它存储在SQLserver的服务器上,接下来来创建应用程序,来调用存储过程对结果进行处理。sp_password 改密码 存储过程的四大优点:一、提高应用程序的通用性和可移植性,存储过程创建后可以在程序中被多次调用,类似于函数一样。应用程序是调用的存储过程,Exec sp_password 旧密码 新密码 登录名 如果改相应的程序功能,存储过程可以随时修改,应用程序不用改。 二、可以更有效的管理用户的权限,有些用户可以调用存储过程,可以执行某些操作,某些用户不能执行某些操作,则不能调用存储过程 use LtsDatabase \\获得数据库使用权限 系统管理员可以通过对执行某一操作的这样的存储过程它的调用权限进行限制,从而限制相应的数据哪些用户可以访问,哪些用户不可以访问, exec sp_raname '网站职员表','新网站职员表' \\为表进行改名。 这样一来就实现了对相应数据访问的控制。避免非授权用户进行操作三、可以提高T-SQL语句的速度,存储过程本身是被编译过的,如果某一操作包含了大量的T-SQL代码,而且要被执行多次,这个时候就比较适合存储过程因为存储过程是放在服务器端的,使用存储过程比直接调用T-SQL语句要快得多,因为是被编译过的四、减轻网络负担、存储过程的创建(自定义存储过程的创建)过程名称 创建存储过程的格式 !!!(函数的返回值可以被调用,存储过程的返回值不能被调用) create proc newProc \\创建存储过程 execute newProc \\调用存储过程 Create Proc 过程名 as @Parameter 参数类型 (普通参数)\\给存储过程本身使用的,普通参数可以直接传递给存储过程,存储过程调用它来完成。 begin @Parameter 参数类型 output (输出参数)\\利用存储过程给某些变量赋值,当然不能直接用他的返回值, print 'hello word!'\\输出hello word! as 这个时候就可以用到输出参数。 end Begin !!!!!!! 输出参数 可以将一个变量传递给它,存储过程作为输出参数,存储过程执行完成之后,会将结果直接赋值 ............. 给这个变量,对这个变量重新赋值,但是这里有一点需要注意的是通过输出参数完成的赋值,而并非通过存储过程End 的返回值来完成的赋值,这是一个和函数根本的不同普通参数的使用create proc newproc2 \\创建存储过程名称 @testString1 varchar(60), !!!!!传递两个参数之间必须用逗号隔开,否则会有错误 @testString2 varchar(60) \\调用的时候可以给它传递的两个参数,test1和test2,这两个参数在执行存储过程的时候 as 会输出下方两个print后面的值。 begin print '第一个参数为:'+@testString1, !!!!!传递两个参数之间必须用逗号隔开,否则会有错误 print '第二个参数为:'+@testString2 endexec newproc2 '大家好','这是存储过程' \\存储过程的调用,和传递参数。输出参数的使用\\带有输出参数的存储过程 create proc newproc8 \\创建存储过程并命名 @testVarA int, \\定义类型(普通参数) @testVarB int, @testVarSum int Output \\定义类型(输出参数) \\输出参数类似于函数的返回值,函数的返回值可以直接作为一个被调用的值给某一个变量赋值。 as begin set @testVarSum=@testVarA+@testVarB \\条件 end调用存储过程declare @testA int \\定义一个变量A set @testA=60 \\赋值 print @testA \\输出变量A execute newproc8 600,800,@testA output \\调用此存储过程,并传递三个参数,将600,800,赋值给@testVarA和@testVarB,A+B的值赋给@testVarSum然后@testVarSum再赋值给@testA output print @testA \\输出 @testA output,这里的output是将@testA设定为输出参数 重新赋值,重新赋值之后就变成1400了60 \\第一个输出的结果自定义的变量@testA 1400 \\第二个结果是如何在存储过程当中通过传递进来的参数进行查找符合条件的记录 根据输入进来的数据查询符合条件的记录create proc newProcA \\创建存储过程并命名 @testNameA varchar(30) \\定义传递进来的参数的数据类型 as begin select * from 网站职员表 where 姓名=@testNameA \\从网站职员表中查找符合条件的记录, end (在@testName中输入的参数必须和在网站职员表中的姓名字段相等(存在))修改存储过程存储修改有两种方法,一种是纯T-SQL语句修改,另一种是视图修改。把所有的记录都要参与查询, 但并不是把它们都显示出来把网站职员表中所有记录工资最高的员工,把它的工资显示出来就可以, 并且作为输出参数进行输出!!!通过视图修改存储过程USE [LtsDatabase试验] GO /****** Object: StoredProcedure [dbo].[newProcA] Script Date: 06/03/2019 11:31:33 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[newProcA] @testNameA varchar(30) \\\\@testMoney money output as ( 修改前 ) ( 修改后 ) begin select * from 网站职员表 where 姓名=@testNameA \\\\select @testMoney=MAX(工资) from 网站职员表 end ( 修改前 ) ( 修改后 )调用此存储过程declare @MaxMoney money \\定义一个变量名称为@MaxMoney,其变量类型为货币型moneyexecute newProcA @MaxMoney output \\调用存储过程名称为newProcA将@MaxMoney作为输出参数传递给@testMoneyselect @MaxMoney as 工资最高的员工工资 \\用select对变量进行输出通过T-SQL语句修改存储过程(重新写一个新的存储过程) Create Proc \\创建存储过程 alter proc newProcA \\修改存储过程,名字为newProcA Alter Proc \\修改存储过程 @testNameA varchar(30) Drop Proc \\删除存储过程 as begin select * from 网站职员表 where 姓名=@testNameA end重命名存储过程 删除存储过程 T-SQL语句删除 删除多个过程sp_rename newProcA,newProc \\利用sp_rename进行重命名 右键存储过程直接删除 drop Proc NewProc drop Proc NewProc,NewProc2,NewProc3(命名前)(命名后)创建一个存储过程,传递给它两个参数它可以比较两个参数的大小。Create Proc ProcSimple1 \\创建一个存储过程,名字为ProcSimple1@testVar1 int, \\传递两个参数@testVar2 int \\传递两个参数,这两个参数是在调用存储过程的时候,向它传递的,并非输出参数,只是两个普通参数asbeginif @testVar1>@testVar2 \\比较两个参数的大小print cast(@testVar1 as varchar(10))+'大于'+cast(@testVar2 as varchar(20)) \\将变量@testVar1和变量@testVar2的int类型转换为varchar类型。转换 else if @testVar1<@testVar2 \\比较两个参数的大小print cast(@testVar1 as varchar(10))+'小于'+cast(@testVar2 as varchar(10))elseprint cast(@testVar1 as varchar(10))+'等于'+cast(@testVar2 as varchar(10))end调用存储过程execute ProcSimple1 100,300 \\调用存储过程,并比较出两个数值的大小调用存储过程declare @testInt1 int,@testInt2 int \\定义两个变量,及变量数据类型select @testInt1=600,@testInt2=2500 \\为这两个变量赋值execute ProcSimple1 @testInt1,@testInt2 \\将@testInt1和@testInt2的值传递给存储过程ProcSimple1中@testVar1,@testVar2两个参数调用ProcSimple1这个存储过程,输出相应的值。创建一个存储过程 调用这个存储过程 Create proc testUser \\创建存储过程并将其命名为testUser execute testUser 'user2','abc' \\调用存储过程,输入用户名和密码 @testUser varchar(60), \\创建普通参数,及其数据类型 用户名 密码 @testPassWord varchar(60) \\创建普通参数,及其数据类型 as begin \\程序块开始执行 declare @testMsg varchar(100) \\声明变量及数据类型 if @testUser='user1' \\首先判断用户是否等于user1,如果是,继续往下循环beginif @testPassWord='123' \\判断密码是否等于123set @testMsg'欢迎学习存储过程。' \\是的话,输出欢迎.....else \\否则set @testMsg='对不起,密码错误' \\输出对不起......end else if @testUser='user2' \\在判断用户是否等于user2....往下循环beginif @testPassWord='abc' \\再判断密码是否为abcset @testMsg='欢迎学习存储过程。' \\是的话,输出欢迎..... else \\否则 set @testMsg='对不起,密码错误' \\对不起.... end else \\如果前两个条件都不成立 set @testMsg='请输入正确的用户名和密码' print @testMsg \\则输出请输入正确的.... end
转载于:https://www.cnblogs.com/LNCC-ZhangXiang/p/11002276.html
SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)相关推荐
- SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--函数)
函数系统函数(算术函数,聚合函数,数据类型转换函数,字符串函数,日期函数,系统统计函数,文本图像函数)算术函数:是对数据类型为整型.浮点型.实型,货币型这些列进行操作算术函数包括(三角函数,反三角函数 ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录四 !--索引和视图)
约束.索引.视图.约束:(要求字段不能为空,必须填写内容,就是非空约束)not null(非空约束).unique(唯一性约束).primary key(主键约束).foreign(外键约束).che ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录六 !--程序块和循环)
declare @test_Var int \\声明变量用declare,声明局部变量用@符号,变量的数据类型为整型int. (声明) set @test_Var=1000 \\为此变量赋值,赋值为1 ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录五 !--数据类型)
二进制数据类型binary varbinary Uniqueidentifierbinarry(n):n用来表示数据的长度,长度为 1-8000,最低长度为1.varbinary:varbinary( ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录九!--游标)
游标就是存储结果集,将从指定表中查询出符合条件的记录,组成了结果集,然后把它存到游标当中,如果要显示游标中的哪一条记录游标(游动的标识) !!!!非常重要的知识点,比较难理解!!!游标提供了对表中的数 ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录二)
批量化更改字段中的数值(对教师进行涨工资)use LtsDatabase试验 update 教师表 set 教师编号=120,教师薪资=教师薪资+1000,教师姓名='于老师',教师职称='高级教师' ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录十 !--触发器)
触发器(同游标一样比较难理解,特殊的存储过程)触发器是一种存储过程,只不过是一种特殊类型的存储过程,它的特殊性就在于根据某种特殊的情况下触发的,存储过程的执行需要手动调用,而触发器作为一个存储过程它的 ...
- SQL Server基础操作(此随笔仅作为本人学习进度记录三)
统计函数 select * from 教师资料 where 教师薪资>(select AVG(教师薪资) from 教师资料) \\从教师资料表中查出所有高于平均薪资的人员.use LtsDat ...
- SQL Server 基础操作(一)安装数据库
Windows server 2012 R2系统 安装SQL Server 2008数据库 1.创建虚拟机---安装Windwos server 2012 R2 操作系统 2.安装windows se ...
最新文章
- 如何在html中选择wrap,使用jQuery中的wrap()函数操作HTML元素的教程
- js生成[n,m]的随机数
- 面试官:谈谈你对零拷贝的理解~
- 密钥登陆Linux服务器
- MySQL学习笔记之五:存储引擎和查询缓存
- JXL生成Excel,并提供下载(2:提供下载)
- 网络连接数4000多正常吗_怀孕36周时胎儿发育情况是怎样的?胎儿体重有4斤多正常吗?...
- Socket Tcp高密集信息广播转发强度测试
- 十天征服单片机百度云_郭天祥十天征服单片机视频下载地址
- 计算机等级考试光敏电阻,光敏电阻
- RDS - 远程桌面服务
- hadoop、hive搭建
- Mac-记录一些超好用的快捷键
- (原创)贴片电阻封装尺寸
- cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤
- Mac触摸板鼠标自定义手势---Jitouch使用教程,让你的效率飞起来(使用过程以及遇到的坑)
- 全球及中国足病鞋垫行业销售情况及营销渠道策略报告(2022-2027年)
- uniapp公众号微信支付
- 人工智能在人力资源行业中的应用
- c语言1064加密字符,ZZULIOJ 1064加密字符
热门文章
- H - Parity game-poj1733(需要离散化)
- [唐胡璐]QTP框架 - 关键字驱动测试框架之七 - Settings管理
- 开源依旧:再次分享一个进销存系统
- pytorch中tensor.mul()和mm()和matmul()
- 对于数据库进行设计在PHP,关于数据库表的设计
- oracle重启一个节点集群,帮忙分析一例数据库两节点集群每隔几个月节点重启
- 手写java_手写JAVA虚拟机(二)——实现java命令行
- java体重指数计算器程序_java 学习 ——计算器小程序
- php extension loaded,php中extension_loaded()函数的使用详解
- nginx php 大小写问题,Nginx实现url请求不区分大小写