当前位置: 首页 > 编程日记 > 正文

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

相关文章:

JS基础类型和引用类型

JS基础类型和引用类型脑图

(转)WinForm控件使用文章收藏整理完成

http://home.cnblogs.com/group/topic/29829.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Label/ProgressBar WinForm下CheckedListBox的数据绑定 Winform 下…

Hdu 2795

Billboard 题型&#xff1a;线段树 描述&#xff1a;板子h*w上贴1*w0的广告&#xff0c;从左上角贴起&#xff0c;询问广告所在的row。 思路&#xff1a;将h分段&#xff0c;结构中增加w域&#xff0c;保存区间[a,b]所以行剩余可贴的最大量。 代码 //1828MS 6340K#include <…

认识一下Kotlin语言,Android平台的Swift

今天在CSDN首页偶然看到一个贴子JetBrains正式公布Kotlin 1.0&#xff1a;JVM和Android上更好用的语言 看完后&#xff0c;感觉Kotlin语法非常简洁&#xff0c;有一系列动态语言的特点&#xff0c;Lambda表达式。高阶函数。闭包&#xff0c;甚至有静态语言的类型检查&#xff…

php开发面试题---php面向对象详解(对象的主要三个特性)

php开发面试题---php面向对象详解&#xff08;对象的主要三个特性&#xff09; 一、总结 一句话总结&#xff1a; 对象的行为&#xff1a;可以对 对象施加那些操作&#xff0c;开灯&#xff0c;关灯就是行为。 对象的形态&#xff1a;当施加那些方法是对象如何响应&#xff0c;…

端口01 - 零基础入门学习汇编语言67

第十四章&#xff1a;端口01 让编程改变世界 Change the world by program 引言 CPU可以直接读写3 个地方的数据 &#xff08;1&#xff09;CPU 内部的寄存器&#xff1b; &#xff08;2&#xff09;内存单元&#xff1b; &#xff08;3&#xff09;端口。 这一章&#xff0c…

基于SSM实现二手交易系统

1、使用技术 SpringSpring MVCMybatisMysqlhtmljscss等 2、功能 用户注册用户登录物品推荐物品分类物品搜索物品发布物品详情购买商品我的主页等等 3、效果 4、视频介绍

RemoteFX原理简介

这几天&#xff0c;Windows 7 SP1的BETA版公开测试了&#xff0c;里面有一个功能&#xff0c;RemoteFX&#xff0c;算是softice比较期待的一个功能&#xff0c;总算是揭开了她的神秘面纱&#xff0c;横空出世&#xff0c;来到你身边。它的发布&#xff0c;对于微软桌面虚拟化解…

bzoj1079: [SCOI2008]着色方案(DP)

1079: [SCOI2008]着色方案 题目&#xff1a;传送门 题解&#xff1a; DP刚神多年前讲过的一道神题。 二话不说&#xff0c;上来就是一个六维数组&#xff1a;F[i][a][b][c][d][e]//表示上一次涂的颜色是还剩下i次可用的&#xff0c;a~e表示不同次数的颜色种数。 次数一样的颜色…

dedecms部分文章出现读取附加信息出错的解决办法

问题&#xff1a; 估计是新版本开发的时候&#xff0c;没有考虑旧版&#xff0c;文章内容为空的新闻&#xff0c;新版不在允许文章内容为空的新闻&#xff0c;这样旧版的内容为空的新闻升级后将无法再编辑。 解决&#xff1a;你可以对如下文件进行如下修改&#xff1a;article_…

程序员的周末:纯野的一天

牵强的标题自己写上这个标题都觉得挺牵强的。首先&#xff0c;我算不上是一个纯粹意义上的程序员了。虽然上了一个多月的班&#xff0c;但对于这份职业到底做什么我都还不是特别的清楚。每天做着一些类似文秘的工作&#xff0c;又类似技术支持的工作&#xff0c;还有点类似程序…

postgresql 分组查询第一条数据

SELECT * FROM ( SELECT ROW_NUMBER() OVER (partition BY k.word ORDER BY k."updatedAt" desc) rowId,* from keywords as k ) t WHERE rowId1

关于工作和生活

一、关于工作与生活 我有个有趣的观察&#xff0c;外企公司多的是25-35岁的白领&#xff0c;40岁以上的员工很少&#xff0c;二三十岁的外企员工是意气风发的&#xff0c;但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽&#xff0c;最后大…

JVM GC 垃圾回收(二)之 判断那些可回收,怎么回收

1、哪些对象可回收&#xff1f; 可行性分析算法 通过一系列GC Roots&#xff08;1&#xff09;作为起始点&#xff0c;其到对象之间的引用&#xff08;2&#xff09;称为引用链&#xff0c;当对象到GC Roots之间不存在引用链相连&#xff0c; 则此对象是不可用的。如下&#xf…

nginx+lua实现上传文件到OSS

目录 技术点 openResty 下载安装 示例 oss.lua 文件 测试代码 text.lua nginx 配置 技术点 openResty OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并…

使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容

使用CEfSharp之旅&#xff08;7&#xff09;CEFSharp 拦截 http 请求 websocket 内容 原文:使用CEfSharp之旅&#xff08;7&#xff09;CEFSharp 拦截 http 请求 websocket 内容版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。可点击关注博主 &…

sqlserver查询一个表的字段信息

select count(*) from syscolumns where idobject_id(表名) 转载于:https://www.cnblogs.com/dongpo888/archive/2011/05/11/2043370.html

ASP.NET无刷新客户端回调

首先说一下&#xff1a;Page.ClientScript 用于管理脚本、注册脚本和向页添加脚本。 返回结果:一个 System.Web.UI.ClientScriptManager 对象。 ClientScriptManager对象 是一些 在 Web 应用程序中定义用于管理客户端脚本的方法&#xff0c;其中有一个方法重载&#xff1a;stri…

common lisp里的几个操作符

setf 赋值操作符&#xff0c;定义一个全局变量。返回值是最后一个赋值的结果。 let 局部变量操作符。let表达式有两部分组成。第一部分是任意多的变量赋值&#xff0c;他们被包裹在一个()中&#xff0c;第二部分是任意数量的表示式作为 let 的函数体。let 表达式的返回值为 最…

敏捷宣言遵循的十二条原则

敏捷宣言遵循的十二条原则Twelve Principles behind the Agile Manifesto 我们遵循以下原则&#xff1a; We follow these principles: 我们最重要的目标&#xff0c;是通过持续不断地及早交付有价值的软件使客户满意。Our highest priority is to satisfy the customer throug…

微信公众号开发的一些配置

1、开发者ID&#xff08;AppID&#xff09; 开发者ID是公众号开发识别码&#xff0c;配合开发者密码可调用公众号的接口能力。 2、开发者密码&#xff08;AppSecret&#xff09; 开发者密码是校验公众号开发者身份的密码&#xff0c;具有极高的安全性。切记勿把密码直接交给第三…

javascript-对混合字母/数字数组进行排序

[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]将其排序为&#xff1a; [A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12] var reA /[^a-zA-Z]/g; var reN /[^0-9]/g;function sortAlphaNum(a, b) {var aA a.replace(reA, "");var bA b.replace…

国王验毒酒问题

国王召开宴会&#xff0c;一共有1000桶葡萄酒。邪恶的刺客在其中一桶酒里下了致命的毒。人们只知道有且仅有一桶酒被下毒&#xff0c;却不知道是哪一桶。现在你可以拿小白鼠做实验&#xff0c;小白鼠可以同时喝下多个桶的取样结果&#xff0c;且无视稀释效果喝到就死&#xff0…

Nodejs核心模块之net和http的使用详解

前言 net和http模块都是node核心模块之一&#xff0c;他们都可以搭建自己的服务端和客户端&#xff0c;以响应请求和发送请求。 net模块服务端/客户端 这里写的net模块是基于tcp协议的服务端和客户端&#xff0c;用到net.createServer和net.connect实现的一个简单请求与响应的d…

NODEJS 使用 XLSX模块导出excel文件

参考&#xff1a;https://www.itranslater.com/qa/details/2582439815438402560 生成excel /*** 用于排序* param a* param b* returns {number}*/ function sortAlphaNum(a, b) {let reA /[^a-zA-Z]/g;let reN /[^0-9]/g;let aA a.replace(reA, "");let bA b.re…

poj 3352

题意&#xff1a;一个连通的无向图&#xff0c;求至少需要添加几条边&#xff0c;救能保证删除任意一条边&#xff0c;图仍然是连通的。 思路&#xff1a;边的双连通图。其实就是要求至少添加几条边&#xff0c;可以使整个图成为一个边双连通图。用tarjan算法(求割点割边)求出l…

oracle删除大表的数据的方法

今天在公司中碰到访问表数据(test 表)速度非常慢&#xff0c;简单的一个select 语句花了10多分钟&#xff0c; 后来查询一下表的数据量&#xff0c;一共有278万多条数据&#xff0c;而且这个数据表的数据大都过期了&#xff0c;对于现在的业务没什么用。可悲的是这个表竟然也没…

ClickHouse 学习

DDL 添加数据库字段 alter table user_tags add column last_subject String; alter table user_tags add column class_trust_valids Int8; 删除列 ALTER TABLE [db].name [ON CLUSTER cluster] DROP COLUMN ... 日期函数 当toDate 遇到空的串报异常时 select toDate();…

zTree实现节点修改的实时刷新

一、应用场景 在实际应用中会遇到动态操作树各节点的需求&#xff0c;在增加树节点后如何实时动态刷新树就十分有必要了。二、项目实践 比如要在test1234节点下新建子节点&#xff0c;首先要选中test1234节点&#xff0c;添加成功后&#xff0c;根据test1234结点的TID去后台请求…

magento常用软件

常见问题&#xff1a; 1. 装完插件导致后台配置出现 Access denied 信息&#xff0c;需要重置账号权限&#xff0c;方可恢复正常。 2. 大多数无法安装插件时&#xff0c;请删除 /downloader/pearlib/pear.ini 文件&#xff0c;最后到 Connect Manager 里保存下设置&#…