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改成test1

 sp_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
end

exec 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,其变量类型为货币型money

execute newProcA @MaxMoney output \\调用存储过程名称为newProcA将@MaxMoney作为输出参数传递给@testMoney

select @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            \\传递两个参数,这两个参数是在调用存储过程的时候,向它传递的,并非输出参数,只是两个普通参数

as

begin

if @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))

else

print 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,如果是,继续往下循环
   begin
   if @testPassWord=‘123‘     \\判断密码是否等于123
   set @testMsg‘欢迎学习存储过程。‘  \\是的话,输出欢迎.....
   else                           \\否则
   set @testMsg=‘对不起,密码错误‘ \\输出对不起......
   end
else if @testUser=‘user2‘ \\在判断用户是否等于user2....往下循环
   begin
   if @testPassWord=‘abc‘  \\再判断密码是否为abc
   set @testMsg=‘欢迎学习存储过程。‘ \\是的话,输出欢迎.....
else                             \\否则
set @testMsg=‘对不起,密码错误‘ \\对不起....
end
else                     \\如果前两个条件都不成立
set @testMsg=‘请输入正确的用户名和密码‘
print @testMsg           \\则输出请输入正确的....
end

原文地址:https://www.cnblogs.com/LNCC-ZhangXiang/p/11002276.html

时间: 2024-11-05 22:02:21

SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)的相关文章

SQL Server基础操作(此随笔仅作为本人学习进度记录六 !--程序块和循环)

declare @test_Var int \\声明变量用declare,声明局部变量用@符号,变量的数据类型为整型int. (声明) set @test_Var=1000 \\为此变量赋值,赋值为1000. select @test_Var \\用select 语句进行显示此变量的值. 变量的声明以及赋值显示 局部变量:就是用户自定义的变量,作用范围仅在程序内部,在程序执行过程中暂存的变量的值,也可以存储从表或视图中查询出来的结果.局部变量在命名过程中必须以@开头 全局变量: 声明变量:声明变

SQL Server基础操作(此随笔仅作为本人学习进度记录五 !--数据类型)

二进制数据类型 binary varbinary Uniqueidentifier binarry(n):n用来表示数据的长度,长度为 1—8000,最低长度为1. varbinary:varbinary(n)!--具有可变动的长度类,型用来存储二进制数据的,.也是用来代表数据的长度,在输入数据的时候,必须在数据的前面加上Ox,作为数据的二进制标识若数据的长度过长, 那么系统会自动截去过长的部分若输入的数据的位数为奇数,则系统会在起始符号Ox后面加个0. Uniqueidentifier:也是二

SQL Server基础操作(此随笔仅作为本人学习进度记录九!--游标)

游标就是存储结果集,将从指定表中查询出符合条件的记录,组成了结果集,然后把它存到游标当中,如果要显示游标中的哪一条记录 游标(游动的标识) !!!!非常重要的知识点,比较难理解 !!!游标提供了对表中的数据检索的一种方式,一种灵活操作手段,只是检索表中数据的一种方式. 在操作的时候也可以把游标看做是一个数据库对象.就好像视图一样. 它也是依赖于T-sql语句来进行查询,把查询出来符合条件的记录,不是一下全部显示出来,可以一条记录一条记录的把它显示出来. 它每次只提取一条记录,每次只显示一条记录.

SQL Server基础操作(此随笔仅作为本人学习进度记录)

create database LtsDatabase \\创建数据库 on ( name=LtsDatabase_data,\\数据库名称 filename='d:\temp\LtsDatabase_data.mbf',\\文件所在位置,扩展名.mdf size=6, \\数据库文件初始化大小 maxsize=12, \\数据库文件最大值可以为多大 filegrowth=10% \\数据库超过现有的尺寸后,数据库增长率 ) log on \\对事物日志的描述 ( name=LtsDatabas

SQL Server基础操作(此随笔仅作为本人学习进度记录十 !--触发器)

触发器(同游标一样比较难理解,特殊的存储过程) 触发器是一种存储过程,只不过是一种特殊类型的存储过程,它的特殊性就在于根据某种特殊的情况下触发的, 存储过程的执行需要手动调用,而触发器作为一个存储过程它的执行,不是我们调用的,而是我们进行某些操作之后来触发它的, 它的原理相似于其它语言的事件句柄, 可以调用存储过程 它的主要作用就是用于实现由主键或外部键所不能保证的,复杂的参照完整性或数据一致性. 触发器还有以下几个功能: 1.可响应数据库的更新,触发器的操作可以通过调用一个或多个存储过程甚至可

SQL Server基础操作(此随笔仅作为本人学习进度记录三)

统计函数 select * from 教师资料 where 教师薪资>(select AVG(教师薪资) from 教师资料) \\从教师资料表中查出所有高于平均薪资的人员. use LtsDatabase alter table 网站职员表 \\修改此表 add 奖金 money \\增加奖金字段 更新奖金字段 use LtsDatabase update 网站职员表 set 奖金=500 \\更新网站职员表所有奖金更新至500元 计算每个员工的总收入是多少 use LtsDatabase s

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

SQL Server基础

一.常用命令 1.使用命令行开启SQL Server服务 获取管理员权限的命令行工具: net start mssqlserver 开启sql server服务 net restart mssqlserver 重新启动sql server服务 net stop mssqlserver 关闭sql server服务 2.使用命令登陆(该方法可适用于在一台没有SQL Server的电脑去操作一台有SQL Server的电脑) 运行: sqpl ?/ [-S 服务器的名称]  [-U 登陆名] [-P

SQL Server基础知识

查看sql server版本 select @@VERSION 基本操作 use tty; 使用tty数据库 create table tt(name varchar(10)); 新建表tt insert into tt values('ftp'); 插入数据ftp select * from tt; 查看表tt delete from tt; 删除表表tt中的一条记录 运行命令的快捷方式: Alt+x 重启数据库服务 net restart mssqlserver 修改用户密码 企业管理器——