精华内容
下载资源
问答
  • 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) drop proc pro_name go create proc pro_name @param_name param_type [=default_value] as begin sql语句 ...

    1.创建存储过程的基本语法模板:

    if (exists (select * from sys.objects where name = 'pro_name'))
        drop proc pro_name
    go
    create proc pro_name
        @param_name param_type [=default_value]
    as
    begin    
        sql语句
    end
    

    ps:[]表示非必写内容。sys.objects存储的是本数据库中的信息,不仅仅存储表名,还有存储过程名 、视图名、触发器等等。

    例如:

     1 if (exists (select * from sys.objects where name = 'USP_GetAllUser'))
     2     drop proc USP_GetAllUser
     3 go
     4 create proc USP_GetAllUser
     5 @UserId int =1
     6 as 
     7 set nocount on;
     8 begin
     9     select * from UserInfo where Id=@UserId
    10 end
    

    ps:SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。

    2.调用方法:

    exec dbo.USP_GetAllUser 2;
    

    ps:一般在执行存储过程是,最好加上架构名称,例如 dbo.USP_GetAllUser 这样可以可以减少不必要的系统开销,提高性能。 因为如果在存储过程名称前面没有加上架构名称,SQL SERVER 首先会从当前数据库sys schema(系统架构)开始查找,如果没有找到,则会去其它schema查找,最后在dbo架构(系统管理员架构)里面查找。

    3.查看本数据库中存在的存储过程

    img

    依次展开数据库、可编程性、存储过程,即可看到已创建的存储过程。

    4.修改存储过程

    alter proc proc_name
    as
      sql语句
    

    5.存储过程中的输出参数的使用

     1 if (exists(select * from  sys.objects where name='GetUser'))
     2     drop proc GetUser
     3 go 
     4 create proc GetUser
     5     @id int output,
     6     @name varchar(20) out
     7 as 
     8 begin 
     9     select @id=Id,@name=Name from UserInfo where Id=@id
    10 end
    11 s
    12 go 
    13 declare 
    14 @name varchar(20),
    15 @id int;
    16 set @id=3;
    17 exec dbo.GetUser @id,@name out;
    18 select @id,@name;
    19 print Cast(@id as varchar(10))+'-'+@name;
    

    ps:参数output为该参数可以输出

    6.分页获取数据的存储过程

     1 if (exists(select * from  sys.objects where name='GetUserByPage'))
     2     drop proc GetUserByPage
     3 go 
     4 create proc GetUserByPage
     5     @pageIndex int,
     6     @pageSize int
     7 as 
     8 declare 
     9 @startIndex int,
    10 @endIndex int;
    11 set @startIndex =  (@pageIndex-1)*@pageSize+1;
    12 set @endIndex = @startIndex + @pageSize -1 ;
    13 begin 
    14     select Id,Name from 
    15     (
    16         select *,row_number()over (order by Id)as number from UserInfo  
    17     )t where t.number>=@startIndex and t.number<=@endIndex
    18 end
    19 
    20 go 
    21 exec dbo.GetUserByPage 2,4;
    

    7.存储过程中事务的创建

    if (exists(select * from  sys.objects where name='JayJayToTest'))
        drop proc JayJayToTest
    go 
    create proc JayJayToTest
        @GiveMoney int,
        @UserName nvarchar(20)
    as 
    beginset nocount on;
        begin tran;
        begin try
            update BankTest set Money = Money-@GiveMoney where Name=@UserName;
            update BankTest set Money = Money+@GiveMoney where Name='test';
            commit;
        end try    
        begin catch        
            rollback tran;
            print ('发生异常,事务进行回滚');
        end catch    
    end
    go
    exec JayJayToTest 10,'jayjay
    

    8.了解存储过程的执行计划

    SELECT * FROM sys.[syscacheobjects]查看当前缓存的执行计划
    

    如果执行存储过程时成功通过解析阶段,则 Microsoft SQL Server 查询优化器将分析存储过程中的 Transact-SQL 语句并创建一个执行计划。执行计划描述执行存储过程的最快方法,所依据的信息包括:

    1.表中的数据量。

    2.表的索引的存在及特征,以及数据在索引列中的分布。

    3.WHERE 子句条件所使用的比较运算符和比较值。

    4.是否存在联接以及 UNION、GROUP BY 和 ORDER BY 关键字。

    查询优化器在分析完存储过程中的这些因素后,将执行计划置于内存中。分析存储过程和创建执行计划的过程称为编译。优化的内存中的执行计划将用来执行该查询。执行计划将驻留在内存中,直到重新启动 SQL Server 或其他对象需要存储空间时为止。如果随后执行了存储过程,而现有执行计划仍留在内存中,则 SQL Server 将重用现有执行计划。如果执行计划不再位于内存中,则创建新的执行计划。

    重新编译执行计划(create proc JayJayToTest with recompile)

    创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高速缓存;该存储过程将在每次执行时都重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。此选项并不常用,因为每次执行存储过程时都必须对其进行重新编译,这样会使存储过程的执行变慢。

    由于数据库的新状态,数据库内的某些更改可能会导致执行计划效率低下或不再有效。SQL Server 检测这些使执行计划无效的更改,并将计划标记为无效。此后,必须为执行查询的下一个连接重新编译新的计划。导致计划无效的情况包括:

    1.对查询所引用的表或视图进行任何结构更改(ALTER TABLE 和 ALTER VIEW)。
      2.通过语句(如 UPDATE STATISTICS)显式生成或者自动生成新的分发内容统计。
      3.除去执行计划所使用的索引。
      4.显式调用 sp_recompile。
      5.对键的大量更改(其他用户对由查询引用的表使用 INSERT 或 DELETE 语句所产生的修改)。
      6.对于带触发器的表,inserted 或 deleted 表内的行数显著增长。

    展开全文
  • SQL存储过程

    2021-01-20 20:20:01
    WcfService wcf服务应用程序,这里还涉及通过SQL存储过程来对数据库进行操作。存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,类似一门程序设计语言,也包括了数据类型、流程控制、输入和输出和它...

    在WPF的学习中,接触到C/S架构,以及Service服务端的三层架构,DAL 数据层、BLL 逻辑层、
    WcfService wcf服务应用程序,这里还涉及通过SQL的存储过程来对数据库进行操作。存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,类似一门程序设计语言,也包括了数据类型、流程控制、输入和输出和它自己的函数库。存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查下面,介绍下如何创建存储过程。打开sql Server 2014 Management Studio。
    在这里插入图片描述
    选择所需操作的数据库,双击打开数据库,从子项中找到可编程性下的存储过程,在存储过程右键打开二级菜单选择,新建存储过程。在这里插入图片描述
    默认打开存储过程后界面如下图,红色线所划的是存储过程自带的说明,存储过程命名,所需变量的声明,以及具体的设置。这些红色的部分都是些说明可直接选中进行删除。不会对存储过程的创建有影响 在这里插入图片描述
    下面差询某数据为例对存储过程进行具体的说明。
    CREATE PROCEDURE 后可以自定义一个名字,存储过程的命名可随意填写,但是为了方便进行管理维护最好有一定意义,可根据项目的名字或具体的某一功能进行命名,例如[UC_ContractManage]这存储过程是对某些数据进行管理的。
    @type char(200) =’’,这相当于C#中一些全局变量的初始化,这里存放的是一些操作中所需要的数据。
    IF—满足条件则进行下面的操作。BEGIN—END,则是给定一定范围,很像if(){}中的话括号。通俗的话就是,(IF)如果(@type=’UserControl_Loaded_SearchDrugAll’)我在干什么, 我要进项目的时候直接查询所有的数据,wpf中选取的控件加载事件,被满足那么就执行下面的代码。

    在这里插入图片描述
    对于存储过程中的查询操作需要涉及到大量的数据的命名,而其中有些表中命名让人记不住的话,那么sql中也提供很人性化的功能,那就是在编辑器中设计查询。通过添加表,直接选中所需要的表,点击勾选进行查询。可谓方便快捷。在这里插入图片描述
    总结:sql中的存储过程给多层架构设计的软件提供了很好的安全性,服务端处理页面逻辑,而对于数据查询等操作则交由数据库的存储过程进行,极大的提高了软件服务的安全性。

    展开全文
  • mysql怎么用sql语句创建存储过程

    千次阅读 2021-01-19 07:34:03
    展开全部可以在客户端里面直接写 比如用 navicat 就写:delimiter$$;createprocedurelucia_proc16(countint)beginDECLAREname_procVARCHAR(20)CHARACTERSETutf8;DECLAREsex_procVARCHAR(4)CHARACTERSETutf8;...

    展开全部

    可以在客户端里面直接写 比如用 navicat 就写:delimiter $$;

    create procedure lucia_proc16(count int)

    begin

    DECLARE name_proc VARCHAR(20) CHARACTER SET utf8;

    DECLARE sex_proc VARCHAR(4) CHARACTER SET utf8;

    DECLARE age_proc INT(10);

    DECLARE class_proc VARCHAR(20) CHARACTER SET utf8;

    DECLARE Addr_proc VARCHAR(50) CHARACTER SET utf8;

    DECLARE i INT;

    set i = 1;

    set sex_proc = '女';

    set age_proc = 20;

    set class_proc = '山治班';

    set Addr_proc = '北京市朝阳区';

    while i

    set name_proc = CONCAT('露西亚',i);

    insert into students(Name,Sex,age,class,Addr)values(name_proc,sex_proc,age_proc,class_proc,Addr_proc);

    set i = i+1;

    end while;

    end

    $$;

    delimiter;

    call lucia_proc16(500);

    fa8c5f214da3872c20cb229caf6c23dd.png

    这个就是一个循环插32313133353236313431303231363533e58685e5aeb931333361313961入 500 条记录的 sp 效果如下:

    74cbfd105debc2dbc6e30edc56536fe3.png

    展开全文
  • SQL创建的几种存储过程创建存储过程表名和比较字段可以做参数的存储过程Create PROCEDURE sp_getTeacherInfo@TblName nvarchar(30), -- 表名@CmpStr nvarchar(30), -- 参与比较的值@TblAtr nvarchar(30) -- 参与比较...

    SQL创建的几种存储过程

    创建存储过程

    表名和比较字段可以做参数的存储过程

    Create PROCEDURE sp_getTeacherInfo

    @TblName nvarchar(30), -- 表名

    @CmpStr nvarchar(30), -- 参与比较的值

    @TblAtr nvarchar(30) -- 参与比较的字段

    AS

    DECLARE @sql varchar(4000)

    SET @sql = 'select * from ' + @TblName + ' where ' + @TblAtr + '=' + @CmpStr

    EXEC (@sql)

    表 tbl_TeacherInfo

    Exec sp_getTeacherInfo 'tbl_TeacherInfo','TeaNo', '07417502'

    // 注意:像这样的调用是错误的

    还原成查询语句

    select * from tbl_TeacherInfo where TeaNo = 07417502

    之所以没报错,是因为参数'07417502'被误认为了 整型,进行了整数的比较

    Exec sp_getTeacherInfo 'tbl_TeacherInfo','Name','楚留香'

    // 报错

    还原成查询语句

    select * from tbl_TeacherInfo where TeaNo = 楚留香

    // 显然是错误的

    正确的调用方法

    Exec sp_getTeacherInfo 'tbl_TeacherInfo','Name',"'楚留香' "

    还原成查询语句

    select * from tbl_TeacherInfo where TeaNo = '楚留香'

    常规存储过程的创建

    Create PROCEDURE sp_AddRowToLogin

    @TeaNo nvarchar(100), -- 比较字段

    @TeaName nvarchar(100) -- 比较字段

    AS

    insert into tbl_UserLogin values(@TeaNo,@TeaName,@TeaNo,0)

    除了指定列其他列都返回的存储过程

    CREATE PROCEDURE sp_Alter

    @TblName nvarchar(30) -- 表名

    AS

    declare @sql varchar(1000)

    select @sql='select '

    select @sql=@sql+name+',' from syscolumns where id=object_id(@TblName) and name not in ('ID','TeaNo')

    select @sql=left(@sql,len(@sql)-1)

    select @sql=@sql+' from ' + @TblName

    exec (@sql)

    // 除了ID和TeaNo两列不返回,其他都返回相关阅读:

    CSS实例:让页脚保持在未满屏页面的底部

    javascript 表单规则集合对象

    CSS解决文字环绕图片问题

    打开与操作Oracle游标

    jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名

    dl,dt,dd制作的CSS垂直菜单

    js 调整select 位置的函数

    jQuery与ExtJS之选择实例分析

    DBA工作随想:流程和测试的重要性

    jquery(live)中File input的change方法只起一次作用的解决办法

    JavaScript constructor和instanceof,JSOO中的一对欢喜冤家

    CSS教程:检验CSS书写是否标准合理

    纯CSS 级联菜单实现代码

    开发跨浏览器javascript常见注意事项

    展开全文
  • 1.存储过程写法 CREATE Proc P_存储过程 @A varchar(30), @B varchar(1000), @C varchar(1000), @D varchar(1000), @E varchar(100), @F varchar(50), @G varchar(2) , @H varchar(30), @Y varchar(50) ...
  • 2、sqlserver的存储过程A:sql语句DDL:数据定义语言,create alter dropDML:数据操作语言,select insert update deleteDCL:数据控制语言,grant revokeB:存储过程创建create procedure 过程名参数信息assql语...
  • 存储过程的优点存储过程的缺点存储过程的基本语法存储过程的分类1、系统存储过程1.1、系统存储过程sql示例2、自定义存储过程2.1、创建不带参数存储过程2.2、修改存储过程2.3、带参数存储过程2.4、带通配符参数存储...
  • SQL Server数据库存储结构的创建过程及调用方法,包括:无参,有参,有返回值
  • 尝试在mysql中创建存储过程时,我很难找到错误.如果我独立运行程序的每一行,一切正常.CREATE PROCEDURE cms_proc_add_child(param_parent_id INT, param_name CHAR(255),param_content_type CHAR(255))BEGINSELECT @...
  • 我想在创建它之前创建一个存储过程..我正在检查数据库和表是否存在,然后创建存储过程 . 我正在使用下面的SQL脚本,但它会引发语法错误 . 我不知道为什么失败了 .这是我得到的错误:消息156,级别15,状态1,行9...
  • 粘贴一篇自己用的比较少的内容–临时表,第一次使用,小...create table #Tmp --创建临时表#Tmp ( ID int IDENTITY (1,1) not null, --创建列ID,并且每次新增一条记录就会加1 cid int, cname varchar (200), usern
  • SQL Server的存储过程支持对其创建脚本的加密,即即便是数据库管理员也无法查看其脚本内容。本文即介绍一种方法对存储过程的加密和解密。 加密实例 加密存储过程 创建示例加密存储过程见下(即加了WITH ENCRYPTION...
  • 一、存储过程 1、存储过程 存储过程(Stored Procedure) 是一组为了完成特定功能的SQL 语句集,经编译后存储在服务器端数据库中,用户通过指定存储过程的名字并... (2)用户自定义存储过程:由用户根据需要创建...
  • 我想首先在命令行中使用sqlplus连接到远程oracle数据库,并希望首先使用这两个文件来创建各自的存储过程,因此我在Oracle SQL Developer中根据该连接的过程看到它们 .在此之后,我还有两个.sql文件看起来像这样,...
  • 我正在尝试在heidisql(mysql)中创建一个存储过程.CREATE PROCEDURE SP_FORM20_POST(P_SESSIONID VARCHAR(256))BEGININSERT INTO tbForm20( SESSIONID, RegDT)VALUES( P_SESSIONID, NOW());END这是我的查询.我正在...
  • 1. 创建后使用 CREATE TABLE #TEMPDealUIDsData( ID int IDENTITY (1,1) not null, --创建列ID,并且每次新增一条记录就会加1 DealUID int, primary key (ID) --定义ID为临时表#Tmp的主键  ); 2. 直接使用 ...
  • 本文主要向大家介绍了SQLServer数据库存储...利用t-sql语句创建并执行图书管理系统数据库的存储过程;5.t-sql语句管理图书管理系统数据库的存储过程;6.利用t-sql语句修改图书管理系统数据库的存储过程;7.利用t-s...
  • 作者:zlt982001将表数据生成SQL脚本的存储过程:CREATE PROCEDURE dbo.UspOutputData@tablename sysnameASdeclare @column varchar(1000)declare @columndata varchar(1000)declare @sql varchar(4000)declare @...
  • 展开全部1、打开SQL server management studio,连接到数据库,展开想要创建的数据库,找到【可编程性】->【存储过程62616964757a...【存储过程】,就可以开始创建存储过程了。3、当点击了第二步的【存储...
  • 写出创建分数存储过程用于计算某门课程成绩最高分、最低分、平均分,参数课程号。*/usexsglgocreateprocedureaa(@课程名nchar(16))asbeginselect课程号,最高分=max(成绩),最低分=min(成绩),平均分=avg(成绩)from成绩...
  • 特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。现在有了 MySQL 存储过程...
  • SQL创建存储过程

    2021-11-17 10:45:33
    创建SQL存储过程需要使用到的语法 - 创建存储过程 CREATE 存储过程的名称(参数) BEGIN ...需要执行的SQL语句 END - 调用 CALL 存储过程的名称(参数) 个人看法,这就是一个函数... 无参数 CREATE PROCEDURE p_...
  • 由于有些项目要迁移到mysql上,数据迁移用MySQLWorkbench就能很好的迁移,最难的是存储过程之类的。下面是sql server存储过程和mysql存储过程的转化:SQL SERVER: MYSQL:1、GO #可以直接 去掉的 1、去掉GO2...
  • 是否可以在存储过程中使用动态生成的SQL在MySQL中创建触发器?我正在通过准备语句在我的过程中执行其他动态构造的查询,但是当我尝试相同的方法来创建触发器时,我得到以下错误:ERROR Code: 1295This command is not ...
  • MySQL创建存储过程

    2021-01-19 19:15:53
    在开发过程中,经常会遇到重复使用某一个功能的情况,为此,MySQL引入了存储过程存储过程就是一条或多条SQL语句的集合,当对数据库进行一系列复杂操作时,存储过程可以将这些复杂操纵,封装成一个代码块,以便重复...
  • 存储过程总结及实验概述sql语句总结用法实例 概述 定义 存储过程是数据库中的一个功能,是一组为了完成特定功能、可以接收和返回用户参数的T-SQL语句预编译集合,经过编译后存储在数据库中,以一个名称存储并作为一...
  • 封装性:将多个SQL操作封装在一个存储过程中,使得复杂的业务逻辑简单化,而且一旦存储过程创建,测试和开发调用的是同一个逻辑,保证了数据一致性 安全性:不用每次编写每一个SQL步骤,这就防止了开发过程中可能...
  • 第十九课 使用存储过程 #什么是存储过程 #为什么使用存储过程 #如何使用存储过程 #创建和使用存储过程的基本语法 一、存储过程
  • SQL 存储过程不带参数

    2021-06-10 15:10:03
    USE Demo GO if EXISTS (SELECT * FROM SYSOBJECTS WHERE name ='USP_') DROP PROC USP_ GO CREATE PROC USP_XI AS select * from bank GO
  • 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。优点存储过程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 449,662
精华内容 179,864
关键字:

创建sql存储过程