精华内容
下载资源
问答
  • 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 server 创建存储过程

    万次阅读 多人点赞 2018-03-01 13:52:52
    右键单击“存储过程”,再单击“新建存储过程”将会创建存储过程模板:让我困惑的 &lt;Procedure_Name, sysname, ProcedureName&gt; 有什么用?搜遍全网 也没答案。。。。上图其实是一个存储过程...

    首先先把我困惑的地方放到前面,后面在详细讲一下过程。

    1. 在 “对象资源管理器”中,连接到 数据库引擎 的实例,然后展开该实例。

    2. 依次展开 “数据库”---》 “可编程性”

    3. 右键单击“存储过程”,再单击“新建存储过程”

    将会创建存储过程模板:

    让我困惑的 <Procedure_Name, sysname, ProcedureName>   有什么用?

    搜遍全网 也没答案。。。。


    上图其实是一个存储过程模板。<Procedure_Name, sysname, ProcedureName> 等替换字符串标记指定模板参数的值“面板 提供替换字符标记的。

    只有这种作用,和存储过程没有关系。

    <Procedure_Name, sysname, ProcedureName> -- Add the parameters for the stored procedure here<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>  这些替换字符串标记只是为了编辑器指定模板参数的值“面板 替换用的。

    点击sql server 的查询--->指定模板参数的值(快捷键ctrl+shift+m)。

    弹出如下窗口:

    这个窗口正是通过存储过程模板的特别标记字段。即上图以标记的对应关系寻找自定义字段的。

    如果删掉<Procedure_Name, sysname, ProcedureName> 

    然后再重新打开“指定模板参数的值”面板如下图:

    创建存储过程

    你会发现少了<Procedure_Name, sysname, ProcedureName> 对应的面板参数设置。

    现在明白<Procedure_Name, sysname, ProcedureName>等文本的意思了吧。

    他只是为“指定模板参数的值”面板服务的。当你在“指定模板参数的值”面板设置了参数,存储过程将会把上面的模板如<Procedure_Name, sysname, ProcedureName>

    自动替换成你设置的参数。如果你不使用这个面板,那你应该删除这些标记(<Procedure_Name, sysname, ProcedureName>等),替换成你想要的参数。

    下面是我通过模板设置生成的存储过程:

    上面的最终代码才是我们最终的存储过程代码。

    如果你不使用 “指定模板参数的值”面板设置参数,那么你应该手动替换删除上面的替换字符串标记

    最终的存储过程  样式如下:


     

    表红色框的才是一个存储过程改用的,其他字段需要我们去填写编辑

    存储过程  创建

    直接官网教程

    在对象资源管理器中创建过程

    1. 在 “对象资源管理器”中,连接到 数据库引擎 的实例,然后展开该实例。

    2. 依次展开 “数据库”、 AdventureWorks2012 数据库和 “可编程性”

    3. 右键单击“存储过程”,再单击“新建存储过程”。

    4. 在 “查询” 菜单上,单击 “指定模板参数的值”

    5. 在 “指定模板参数的值” 对话框中,输入下列所示的参数值。

      参数ReplTest1
      作者您的姓名
      创建日期今天的日期
      Description返回雇员数据。
      Procedure_nameHumanResources.uspGetEmployeesTest
      @Param1@LastName
      @Datatype_For_Param1nvarchar(50)
      Default_Value_For_Param1NULL
      @Param2@FirstName
      @Datatype_For_Param2nvarchar(50)
      Default_Value_For_Param2NULL
    6. 单击“确定” 。

    7. 在 “查询编辑器”中,使用以下语句替换 SELECT 语句:

      SQL复制
      SELECT FirstName, LastName, Department  
      FROM HumanResources.vEmployeeDepartmentHistory  
      WHERE FirstName = @FirstName AND LastName = @LastName  
          AND EndDate IS NULL;  
      
    8. 若要测试语法,请在 “查询” 菜单上,单击 “分析” 如果返回错误消息,则请将这些语句与上述信息进行比较,并视需要进行更正。

    9. 若要创建该过程,请在 “查询” 菜单上单击 “执行” 该过程作为数据库中的对象创建。

    10. 若要查看在对象资源管理器中列出的过程,请右键单击“存储过程”,然后选择“刷新”。

    11. 若要运行该过程,请在对象资源管理器中右键单击存储过程名称 HumanResources.uspGetEmployeesTest,然后选择“执行存储过程”。

    12. 在“执行过程”窗口中,输入 Margheim 作为参数 @LastName 的值,并输入值 Diane 作为参数 @FirstName 的值。

    下图是我创建的存储过程:




    展开全文
  • sql server创建存储过程

    2020-05-18 11:11:39
    create procedure PRO_RAIN_HOURS @tm datetime as begin select a.stcd ,a.rn, b.测站名称 from (SELECT stcd,sum(rn) as rn FROM [dbo].[Rain_RealTime] where tm >=@tm GROUP BY stcd)a join VW_...

    create procedure PRO_RAIN_HOURS
      @tm datetime      
      as
      begin
          select a.stcd ,a.rn, b.测站名称 from (SELECT stcd,sum(rn) as rn FROM [dbo].[Rain_RealTime] where tm >=@tm GROUP BY stcd)a join VW_StationInfo b on a.stcd =b.测站代码 where b.[启用标志]=1
      end

    展开全文
  • SQLSERVER创建存储过程

    2019-09-17 03:34:33
    createprocedureInsertTest as begin declare@iint declare@svarchar(20) set@i=1 while@i<=100 begin select@s=cast(@iASvarchar(20)...

    create procedure InsertTest

    as

    begin

    declare @i int

    declare @s varchar(20)

    set @i=1

    while @i<=100

    begin

    select @s=cast(@i AS varchar(20)) 

    insert into test (A,B,C,D) VALUES ('a'+@s,'b'+@s,'ccccc','ddddd')

    SET @i=@i+1

    end

    end

    转载于:https://my.oschina.net/u/3711831/blog/1785791

    展开全文
  • SQL Server创建存储过程

    2016-05-13 16:24:07
    什么是存储过程? q 存储过程(procedure)类似于C语言中的函数 q 用来执行管理任务或应用复杂的业务规则 ...存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译。 存储在数据库
  • Sql server创建存储过程

    2016-10-18 01:11:39
    创建成功后执行存储过程,在查询分析器里输入如下脚本: exec CheckLogin '862666','123456' --语法格式为: --exec 存储过程名 '参数1','参数2' 创建一个更新登录信息的存储过程 create procedure ...
  • 找到一个数据库,展开,下面有可编程性->存储过程,右键,新建存储过程。如下图所示:
  • 1、为什么sqlserver创建存储过程成功,却找不到这个存储过程呢? 需要点击工具上,创建存储过程,在那个里面去写存储过程,然后再刷新存储过程就会出现了 注意:如果是在新建查询上面,直接写sql创建存储过程,会...
  • 数据库创建存储过程并连接程序数据库创建存储过程第一步第二步第三步第四步存储过程连接程序第一步 数据库创建存储过程 数据库类型:SQLserver 第一步 “库”——“可编程性”——“存储过程”(右键——“新建”...
  • 自定义存储过程,由用户创建并能完成某一特定功能的存储过程存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功, 存储过程并不能像函数那样被直接调用,只能利用 execute...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,349
精华内容 2,139
关键字:

sqlserver创建存储过程