zoukankan      html  css  js  c++  java
  • SQL Server 存储过程之基础知识(转)

    什么是存储过程呢?
    存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
    通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。

    那为什么要用存储过程呢?
    1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
    2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
    3.存储过程可以重复使用,可减少数据库开发人员的工作量。
    4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

    那存储过程怎么用呢?

    以下通过表feili来了解存储过程,因为是要了解存储过程的简单用法,所以所有例子均很简单。

    无参数存储过程:
    选出feili表中的所有信息,

    ALTER PROCEDURE [dbo].[feili]
    AS
    BEGIN
      -- routine body goes here, e.g.
      -- SELECT 'Navicat for SQL Server'
    SELECT * FROM FEILIPOINT
    END

    有参数存储过程:
    全局变量
    全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
    选出指定id的肥力信息:

    ALTER PROCEDURE [dbo].[feili]
    (@OBJECTID nvarchar(100))
    AS
    DECLARE @sql1 nvarchar(MAX);
    BEGIN
    SET @sql1='SELECT * FROM FEILIPOINT where OBJECTID='+@OBJECTID
    EXEC sp_executesql @sql1;
    END

    上面是在外部给变量赋值,也可以在内部直接给变量设置默认值

    ALTER PROCEDURE [dbo].[feili]
    (@OBJECTID nvarchar(100)='1')
    AS 
    BEGIN
    SELECT * FROM FEILIPOINT where OBJECTID=@OBJECTID
    EXEC feili;
    END
    

    也可以把变量的内容输出,使用output

     

    ALTER PROCEDURE [dbo].[feili]
    (
    @OBJECTID nvarchar(100)
    )
    AS 
    DECLARE @sql1 nvarchar(MAX);
    DECLARE @num INT;
    BEGIN
    SET @sql1='SELECT @num=count(*) FROM FEILIPOINT where OBJECTID='+@OBJECTID
    EXEC sp_executesql @sql1,N'@num int output',@num OUTPUT;
    SELECT @num;
    END
    

    以上是全局变量,下面来了解局部变量
    局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
    局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}
    局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
    局部变量的显示:select @变量名

    ALTER PROCEDURE [dbo].[feili]
    AS 
    DECLARE @objectid nvarchar(100);
    BEGIN
    DECLARE @sql1 nvarchar(MAX);
    SET @objectid='10';
    SET @sql1='SELECT * FROM FEILIPOINT WHERE objectid='+@objectid;
    EXEC sp_executesql @sql1;
    END
    

    也可以这样写

    ALTER PROCEDURE [dbo].[feili]
    AS 
    DECLARE @objectid nvarchar(100);//该变量若需要动态使用,还需要在exec中进行声明
    BEGIN
    DECLARE @sql1 nvarchar(MAX);
    SET @objectid='10';
    SET @sql1='SELECT * FROM FEILIPOINT WHERE objectid=@objectid';
    EXEC sp_executesql @sql1,N'@objectid nvarchar(max)',@objectid;
    END
    

      

     

     

     

  • 相关阅读:
    JAVA内存管理
    计算机网络面试题一
    计算机网络面试题二
    【有容云干货-容器系列】补脑专用,容器生态圈脑图大放送
    PPT | Docker定义存储-让应用无痛运行
    有容云-容器安全,六招解决
    新IT运维时代 | Docker运维之最佳实践-下篇
    新IT运维时代 | Docker运维之最佳实践-上篇
    有容云-【原理】Docker存储驱动之AUFS
    【有容云案例系列】基于Jenkins和Kubernetes的CI工作流
  • 原文地址:https://www.cnblogs.com/ggz19/p/5097372.html
Copyright © 2011-2022 走看看