`

存储过程的简单用法(转)

    博客分类:
  • sql
阅读更多
在存儲過程中的格式規格:

CREATE PROCEDURE XXX

/*

列舉傳入參數

1:名稱,2:類型,包括長度

Eg:@strUNIT_CODE varCHAR(3)

*/

參數1,

參數2……………

As

/*

定義內部參數

1:名稱,2:類型,包括長度

Eg:@strUNIT_CODE varCHAR(3)

*/

Declare

參數1,

參數2……………

/*

初始化內部參數

Eg:SET @strUNIT_CODE=’’

*/

Set參數1的初始值

Set參數2的初始值…………

/*

過程的主內容區

Trascation:這裡起到的作用是,如果他中間的任何一個執行錯誤,就全部執行都返回,這裡sql sever 7.0以前一定要寫入,以後的就可以省略

Return:結束這支sp

*/

Begin trascation

    /*

        1:可以取得需要的值以存在內部參數中

     Eg:SELECT @strUNIT_CODE=UNIT_CODE FROM UNIT WHERE …….

2:可以用取到的或傳入的參數進行判斷,來進行update,insert,delete 等等操作

eg: IF @strUNIT_CODE=’’

         BEGIN

     //具體的操作

End

Else

Begin

    //具體的操作

End

3:有關游標的問題

     Eg:

        declare db cursor for       //聲明一個游標(db為其名稱)

        SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT(@strTO,2)//記錄集

        open db                 //打開游標

            fetch next from db into @strUNIT_NAME //將第一個值放入一個參數中

        while @@fetch_status = 0 ---存在本筆值向下循環

(0:順利執行;-1:失敗,或資料列超出結果集;-2:擷取的資料列已遺漏)

        BEGIN             ----開始循環

                        //個體操作

        End                ----結束循環

        Close db            ---關閉游標

deallocate db         //移除資料指標參考

*/

Commit trascation

Return



下面是一個例子

CREATE PROCEDURE TEST_2

@strTO VARCHAR(3)

AS

DECLARE

@strUNIT_NAME VARCHAR(800),

@strSQL VARCHAR(8000),

@Link VARCHAR(1),

@Link1 VARCHAR(1)



SET @strUNIT_NAME=''

SET @strSQL=''

SET @Link=''

SET @Link1=''



/*

處理update 的部分

EXEC TEST_2 '011'

EXEC TEST_2 ''

SELECT UNIT_NAME FROM UNIT WHERE UNIT_CODE='011'

*/

BEGIN TRANSACTION                                      

         IF @strTO<>''

        BEGIN

                UPDATE UNIT SET UNIT_NAME=REPLACE(UNIT_NAME,'*','') WHERE UNIT_CODE=@strTO

        END

             ELSE

        BEGIN

                UPDATE UNIT SET UNIT_NAME=UNIT_NAME+'*' WHERE UNIT_CODE='011'

        END

/*

EXEC TEST_2 '011'

功能說明:本sp用於處理cursor問題

*/

        IF   @strTO<>''

            BEGIN

                        declare db cursor for                                                --必需聲明在查詢的前面

                SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT(@strTO,2)---取到相關信息

            END

        ELSE

            BEGIN

                     declare db cursor for                                              --必需聲明在查詢的前面

                     SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT('011',2)---取到相關信息

            END

        open db                                                    ---開起取到的信息

        fetch next from db into @strUNIT_NAME        ---把第一筆放入@strUNIT_NAME中

        while @@fetch_status = 0                                           ---表示存在本筆資料

        BEGIN                                                    ----開始循環

                set @strSQL =@strSQL+@Link1+@Link+ @strUNIT_NAME ----設定保存的值

                fetch next from db into @strUNIT_NAME                       ----進行下次循環

                SET @Link=CHAR(13) +CHAR(10)

                SET @Link1=','

        END                                                        ----結束循環

        close db                                                   ---關閉信息

        deallocate db                                            ---移除資料指標參考

SELECT @strSQL

COMMIT TRANSACTION

RETURN
如果循环insert的例子
DECLARE @strLoginID VARCHAR(16)
BEGIN
declare db cursor for
SELECT LoginID FROM dbo.s_Users WHERE len(UnitCoding) in(9,12)
END
open db
fetch next from db into @strLoginID
while @@fetch_status = 0 BEGIN
insert into s_P_User
select @strLoginID,LevelID from s_P_User where LoginID = 'aa'
fetch next from db into @strLoginID
END
close db
deallocate db

一、TRUNCATE

二、Select INTO 建表
    把一个表中的数据复制到另外一个表中。

三、Insert INTO Select

四、补充:临时表
    临时表存储在系统数据库tempdb中
    临时表会被系统隐式地丢弃

---------------------------------------------------------

五、存储过程(**)

    一、简介:
   
   存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后
    存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行

它,
    在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程


    系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取
    信息,从而为系统管理员管理SQL Server。 用户自定义存储过程是由用户创建,并能完成
    某一特定功能,如:查询用户所需数据信息的存储过程。
   
      存储过程具有以下优点
    1.存储过程允许标准组件式编程(模块化设计)
    存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而

且数
    据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代

码只包含存
    储过程的调用语句,从而极大地提高了程序的可移植性。
           
    2.存储过程能够实现快速的执行速度
   如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理


    执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进

行分析优
    化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时

都要进行
    编译和优化,因此速度相对要慢一些。
               
    3.存储过程能够减少网络流量
   对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL
    语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调

用语句,否
    则将是多条SQL 语句从而大大增加了网络流量降低网络负载。
           
    4.存储过程可被作为一种安全机制来充分利用
   系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的


    制。


    二、变量

    @I

    三、流程控制语句(if else | select case | while )
    Select ... CASE 实例
    DECLARE @iRet INT, @PKDisp VARCHAR(20)
    SET @iRet = '1'
    Select @iRet =
    CASE
        WHEN @PKDisp = '一' THEN 1
        WHEN @PKDisp = '二' THEN 2
        WHEN @PKDisp = '三' THEN 3
        WHEN @PKDisp = '四' THEN 4
        WHEN @PKDisp = '五' THEN 5
        ELSE 100
    END

    四、存储过程格式
       
    创建存储过程
    Create Proc dbo.存储过程名
    存储过程参数
    AS
    执行语句
    RETURN
    执行存储过程
    GO

-- 变量的声明,sql里面声明变量时必须在变量前加@符号
    DECLARE @I INT

-- 变量的赋值,变量赋值时变量前必须加set
    SET @I = 30

-- 声明多个变量
    DECLARE @s varchar(10),@a INT

-- Sql 里if语句
    IF 条件 BEGIN
        执行语句
    END
    ELSE BEGIN
        执行语句
    END
           
    DECLARE @d INT
    set @d = 1

    IF @d = 1 BEGIN

    -- 打印
        PRINT '正确'
    END
    ELSE BEGIN
        PRINT '错误'
    END


-- Sql 里的多条件选择语句.
    DECLARE @iRet INT, @PKDisp VARCHAR(20)
    SET @iRet = 1
    Select @iRet =
    CASE
        WHEN @PKDisp = '一' THEN 1
        WHEN @PKDisp = '二' THEN 2
        WHEN @PKDisp = '三' THEN 3
        WHEN @PKDisp = '四' THEN 4
        WHEN @PKDisp = '五' THEN 5
        ELSE 100
    END

-- 循环语句
    WHILE 条件 BEGIN   
        执行语句
    END

    DECLARE @i INT
    SET @i = 1
    WHILE @i<1000000 BEGIN
        set @i=@i+1
    END
    -- 打印
    PRINT @i


-- TRUNCATE 删除表中的所有行,而不记录单个行删除操作,不能带条件

    /*
    TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行

。但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源少。
    Delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过

释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
    TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用

的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。如果要删除表定义及其数据,请

使用 Drop TABLE 语句。
    对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 Where 子句的

Delete 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
    TRUNCATE TABLE 不能用于参与了索引视图的表。
    示例
        下例删除 authors 表中的所有数据。*/
       
        TRUNCATE TABLE authors
               

-- Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的
-- Select 不同。 新表的字段具有和 Select 的输出字段相关联(相同)的名字和数据类型。
       
        select * into NewTable
            from Uname


-- Insert INTO Select
        -- 表ABC必须存在
        -- 把表Uname里面的字段Username复制到表ABC
        Insert INTO ABC Select Username FROM Uname

-- 创建临时表
        Create TABLE #temp(
            UID int identity(1, 1) PRIMARY KEY,
            UserName varchar(16),
            Pwd varchar(50),
            Age smallint,
            Sex varchar(6)
        )
        -- 打开临时表
        Select * from #temp

-- 存储过程
        -- 要创建存储过程的数据库
        Use Test
        -- 判断要创建的存储过程名是否存在
            if Exists(Select name From sysobjects Where name='csp_AddInfo' And

type='P')
            -- 删除存储过程
            Drop Procedure dbo.csp_AddInfo
        Go
               
               
        -- 创建存储过程
        Create Proc dbo.csp_AddInfo
        -- 存储过程参数
        @UserName varchar(16),
        @Pwd varchar(50),
        @Age smallint,
        @Sex varchar(6)
        AS
        -- 存储过程语句体
        insert into Uname (UserName,Pwd,Age,Sex)
            values (@UserName,@Pwd,@Age,@Sex)
        RETURN
        -- 执行
        GO
               
        -- 执行存储过程
        EXEC csp_AddInfo 'Junn.A','123456',20,'男'
分享到:
评论

相关推荐

    oracle存储过程基本用法

    ### Oracle存储过程基本用法详解 #### 一、概述 Oracle 存储过程是一种数据库对象,可以在其中封装一系列 SQL 语句和 PL/SQL 块。存储过程可以接受输入参数,返回输出参数,并且可以执行复杂的逻辑操作。通过创建...

    SQL 系统存储过程用法整理

    ### SQL系统存储过程用法详解 #### 概述 存储过程是预编译好的SQL语句集合,在数据库中被创建并保存,用户可以通过简单的调用来执行这些存储过程,从而达到提高性能、简化复杂操作的目的。SQL Server提供了丰富的...

    oracle存储过程的基本用法

    在本文中,我们将深入探讨Oracle存储过程的基本用法,包括创建、调用和管理存储过程。 1. **创建存储过程**: 创建存储过程使用`CREATE OR REPLACE PROCEDURE`语句。以下是一个简单的示例: ```sql CREATE OR ...

    Hibernate3调用存储过程用法

    在Java的持久化框架Hibernate中,调用数据库的存储过程是一项...以上就是Hibernate3调用存储过程的基本用法和相关知识点,希望对你理解并实际操作有所帮助。在实际项目中,应结合具体的业务需求和数据库特性灵活运用。

    Oracle存储过程、游标、函数的详解

    下面展示一个简单的存储过程示例,该过程接受一个部门编号作为输入参数,并返回该部门的所有员工信息: ```sql CREATE OR REPLACE PROCEDURE GetEmpByDept(deptno IN NUMBER) IS BEGIN FOR emp_rec IN (SELECT * ...

    oracle存储过程-帮助文档

    `oracle procedure.chm`是一个帮助文件,通常包含详细的参考信息、示例和教程,供用户学习和查询Oracle存储过程的用法。CHM(Compiled HTML Help)格式是一种微软提供的离线帮助文档格式,用户可以通过搜索和导航来...

    SQLSERVER2000一些内置存储过程用法和说明

    ### SQL Server 2000 内置存储过程用法与说明 #### 一、引言 随着互联网技术的发展和数据库应用的普及,SQL Server 2000 作为一款主流的关系型数据库管理系统(RDBMS),其安全性问题日益受到关注。在实际应用中,...

    mysql存储过程与视图(存储过程语法介绍、MySQL视图用法、注意事项)..docx

    - **执行速度**:对于简单的单表数据写入操作,使用存储过程通常比通过应用程序或客户端连接写入数据更快,因为减少了网络通信、解析和优化器的开销。 #### 二、MySQL视图 ##### 1、基本概念 视图是一种虚拟表,它...

    简单的 Microsoft Sql Server 存储过程的使用

    在SQL Server数据库管理系统中,存储过程是预编译的SQL语句集合,它可以用来执行复杂的数据库操作,提高数据处理的效率,并提供了一种封装数据库逻辑的方式。本篇文章将深入探讨如何使用Microsoft SQL Server中的...

    sqlhelper调用存储过程.rar

    本文将深入探讨如何使用SqlHelper调用存储过程,包括存储过程的基础概念、SqlHelper的基本用法以及具体步骤,以帮助开发者更高效地进行数据库操作。 一、存储过程基础 存储过程是预编译的SQL语句集合,存储在数据库...

    数据库函数、存储过程详解

    例如,以下是一个简单的存储过程示例,它接受一个参数,然后根据该参数查询表中的数据: ```sql CREATE PROCEDURE GetEmployeeByDepartment(@departmentID int) AS BEGIN SELECT * FROM Employees WHERE ...

    oracle存储过程(语法实例).pdf

    调用存储过程的简单形式是:`execute MY_PROCEDURE('ONE PARAMETER')` 5. **存储过程与函数的区别** 函数必须有返回值,可以直接在查询中使用,而存储过程可以没有返回值。函数在SQL语句中作为表达式的一部分,如...

    通用的增删改查 存储过程

    在数据库管理中,存储过程(Stored Procedure)是一种预编译的SQL代码集合,它封装了特定的数据库操作,可以执行常见的数据操作任务,如增、删、改、查(CRUD)。这些操作对于任何数据库系统来说都是基础且频繁的,...

    plsql的存储过程

    在实际应用中,存储过程通常用于处理数据,例如以下简单的查询过程`pro_lab`,它接收一个员工ID并输出其名字: ```sql CREATE OR REPLACE PROCEDURE pro_lab( p_id s_emp.ID%TYPE ) IS v_fname s_emp.FIRST_NAME%...

    ORACLE中触发器和存储过程介绍相关代码

    这些示例将涵盖不同类型的触发器(如行级触发器和语句级触发器)以及各种存储过程的用法,包括输入输出参数、游标和异常处理等。通过实践,你将能够更好地理解Oracle数据库中触发器和存储过程的使用和优势,提升你的...

    公司系统研发讲解sqlserver的存储过程

    本文将深入探讨SQL Server存储过程的基础概念、创建方法及应用场景,旨在帮助读者快速入门并掌握其基本用法。 #### 二、存储过程概述 ##### 1. 定义 存储过程是一组预编译的T-SQL语句集合,它被作为一个单元存储...

    mysql存储过程之case语句用法实例详解

    例如,下面的存储过程`GetCustomerShipping`使用简单CASE语句: ```sql DELIMITER $$ CREATE PROCEDURE GetCustomerShipping(in p_customerNumber int, out p_shiping varchar(50)) BEGIN DECLARE ...

    Oracle存储过程基本语法格式

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL和PL/SQL语句,形成可重复使用的代码块,以实现复杂的数据处理逻辑。本文将详细解释Oracle存储过程的基本语法格式及其主要组成部分。 ...

    PostgreSQL存储过程用法实战详解

    在PostgreSQL中,存储过程是一种预编译的SQL代码集合,可以用来执行复杂的数据库操作,提高性能,并且有助于代码的重用。本文将深入探讨PostgreSQL存储过程的定义、使用方法以及注意事项,通过实例帮助理解。 首先...

    mysql存储过程原理与用法详解

    例如,创建一个简单的存储过程: ```sql CREATE PROCEDURE myselect() BEGIN SELECT @@version; END; ``` 调用存储过程: ```sql CALL myselect(); ``` 对于带有参数的存储过程,可以这样创建和调用: ```sql ...

Global site tag (gtag.js) - Google Analytics