首页 > SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)

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

更多相关:

  • Bigtable 可以说是log-structed以及page-oriented 两种存储引擎的整合体,我们性能优越的单机存储引擎leveldb和rocksdb就是基于google的bigtable存储系统实现的。 论文地址Bigtable: A Distributed Storage System for Structured Da...

  • 一下为个人结合其他人对分布式存储 所需的技能进行总结,绘制成如下图谱,方便针对性学习。 这里对分布式存储系统接触较多的是ceph,所以在分布式存储系统分支上偏向ceph的学习。 如有分类有问题或者分支不合理,欢迎大家批评指正,目的是为了大家共同提升 文章目录分布式存储技能树Linux操作系统文件系统I/O系统I/O追踪内存管理Pag...

  • 原文地址:https://github.com/jaywcjlove/handbook/blob/master/MySQL/MySQL%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.md MySQL数据类型 数字类型 整数: tinyint、smallint、mediumint、int、bigint浮点数:...

  • 为什么要用存储过程   几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不照样运行的好好的? 存储过程真的那么重要吗,它到底有什么好处呢? 笔者认为,存储过程说白了就是一堆 SQL 的合并。...

  • show create procedure 存储过程的名称; ##主从同步是会同步存储过程的 转载于:https://www.cnblogs.com/yangxiaochu/p/9397108.html...

  •     最近在学习数据库,上课过程中总是在许多知识点有或多或少的问题,对于这些问题的产生,大概是由于我听课习惯所造成的吧,好啦,废话不多说,开始今天到主题吧。    首先介绍SQL的存储过程,先来给它定义,存储过程是由过程化SQL语句书写的过程,这个过程经过编译和优化后存储在数据库服务器中,因此称它为存储过程,使用是只需要调用即可...

  • 情况一:后台给的日期是Sat Jul 31 2021 21:50:01 GMT+0800 (中国标准时间),如果直接呈现给用户,他们一定会吐槽你不说人话~~~ 情况二:后台给的百分数是小数没有转化成00%格式 采用vue的过滤机制就可以解决这种情况,有两种方式: 第一种:全局写法,在main.js里面加入 // 【...

  • 问题描述 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入test.exe  -a 1 2       执行1+2输出3 问题分析 上面的逻辑思维很简单,但是问题在于如何在VS中向...

  • ------------------------siwuxie095                         MyBatis 中 #{} 和 ${} 的区别       1、在 MyBatis 的映射配置文件中,动态传递参数有两种方式:    (1)#{} 占位符    (2)${} 拼接符          2、#{} 和...

  •     #2.6 map()# 第一个参数传入一个函数,,第二个参数为一个可迭代对象li_1 = (1,3,5,7)def funcA(x): return x*xm1 = map(funcA,li_1)print(type(m1))print(m1())# 2.6 reduce()# 第一个参数传入一个函数,第二个参数 可以迭...

  • 列表,元组,字典的转换。 list列表是一组可变的元素集合 列表是'[]'括号组成的,[]括号包含所有元素,列表的创建可以传递字符串,也可以传递多个字符串来创建列表。如"asd", / "a","b" ... tuple元组的创建和列表一致,区别在于 元组是以'()'创建的,并且元组数据不可变。 dict字典不同于列表和元组,他...