SQL Server数据库基础:存储过程介绍、用脚本“创建/修改/删除/调用”存储过程。

一、存储过程介绍。

    1.1 什么是存储过程?

        存储过程是一种为了完成特定功能的一个或一组SQL语句集合。经编译后存储在服务器端的数据库中,
        可以利用存储过程来加速SQL语句的执行效率。

    1.2 存储过程的分类。

        分为“系统存储过程”和“自定义存储过程”。

        系统存储过程: 

            存在于master数据库中,其他数据库可以直接调用,不必在前面加上数据库名。
            在创建其他新的数据库时,这些系统存储过程便会在新数据库中自动创建。

        自定义存储过程:

            为完成特定功能由用户自己创建的存储过程。
            存储过程可以传参,也可以不传参。
            存储过程可以有返回值,也可以没有返回值。
            存储过程可以只有一个操作,也可以有多个操作。

    1.3 存储过程的优点。

        1.3.1 提高应用程序的通用性和可移植性。
              允许多次调用,不必每次都去编写SQL语句,方便维护人员随时修改。

        1.3.2 可以有效管理数据库权限,提高数据库安全性。

        1.3.3 提高执行SQL语句的效率。

        1.3.4 减轻服务器的负担。

    1.4 存储过程的缺点。

        1.4.1 存储过程占用数据库物理空间。

        1.4.2 存储过程需要人员定期维护。



二、用脚本“创建/修改/删除/调用”存储过程。

    假如有下面2张表,以它们举例说明:


        产品信息表(ProductInfo):
            标识列       Id                int 
            产品编号     ProductNo         varchar(50)
            产品名称     ProductName       nvarchar(100)
            产品类型编号  ProductTypeId     int 
            产品价格     ProductPrice      decimal(18, 2)
            产品数量     ProductCount      int 
            产品备注     ProductRemark     nvarchar(150) 

        产品类型表(ProductTypeInfo):
            产品类型编号  ProductTypeId    int 
            产品类型名称  ProductTypeName  nvarchar(50)  



        use ProductManagementDB
        go 


        -- 先创建好主表,指定主键
        create table ProductTypeInfo
        (
            ProductTypeId int identity(1, 1) primary key not null,
            ProductTypeName nvarchar(50) not null
        )
        go 


        -- 再创建好从表,指定外键
        create table ProductInfo
        (
            Id int identity(10001, 1) primary key not null,    -- 标识种子,自增量
            ProductNo varchar(50) unique not null,              -- 指定unique约束
            ProductName nvarchar(100) not null,
            ProductTypeId int not null foreign key references ProductTypeInfo(ProductTypeId),   -- 指定ProductTypeInfo表中的ProductTypeId为外键
            ProductPrice decimal(18, 2) default(0.00) check(ProductPrice > 9.99 and ProductPrice < 499.99) not null,  -- 指定default约束和check约束
            ProductCount int default(0) not null,
            ProductRemark nvarchar(150) null
        )
        go



    2.1 创建存储过程。
        
        关键字:
            "create" 和 "procedure / proc"。

        语法:
            create proc/procedure 存储过程名称 参数列表
            as
                begin
                    T-SQL语句
                end
            go


        2.1.1 创建一个无参的存储过程。

            例如:

                create proc proc_productInfo
                as
                    begin

                        select 
                            pi.Id,
                            pi.ProductNo,
                            pi.ProductName,
                            pi.ProductTypeId,
                            pti.ProductTypeName,
                            pi.ProductPrice,
                            pi.ProductCount
                        from
                            ProductInfo pi
                        inner join
                            ProductTypeInfo pti
                        on
                            pi.ProductTypeId = pti.ProductTypeId

                    end
                go 


        2.1.2 创建一个有参的存储过程。

            存储过程内部:
                定义局部变量,关键字"declare"。
                设置单个变量,关键字"set"。
                设置多个变量,关键字"select"。
           
                declare @变量1 数据类型
                declare @变量1 数据类型, @变量2 数据类型, @变量3 数据类型......
                set @变量1 = 值1
                select @变量1 = 值1, @变量2 = 值2, @变量3 = 值3......


            例如:
                declare @DefaultProductNo varchar(50)            
                declare @DefaultProductName nvarchar(100)
                declare @DefaultProductTypeId int, @DefaultProductPrice decimal(18, 2), @DefaultProductCount int, @DefaultProductRemark nvarchar(150)

                set DefaultProductNo = 'isbn123456'
                set DefaultProductName = '毛泽东选集'
                select @DefaultProductTypeId = 12, @DefaultProductPrice = 59.99, @DefaultProductCount = 288, @DefaultProductRemark = '一代伟人的气势磅礴作品!'
            

            例如:

                create proc proc_addProductInfo
                    @ProductNo varchar(50),            
                    @ProductName nvarchar(100),
                    @ProductTypeId int,  
                    @ProductPrice decimal(18, 2), 
                    @ProductCount int,
                    @ProductRemark nvarchar(150)
                as
                    begin

                        insert into ProductInfo(ProductNo, ProductName, ProductTypeId, ProductPrice, ProductCount, ProductRemark)
                        values(@ProductNo, @ProductName, @ProductTypeId, @ProductPrice, @ProductCount, @ProductRemark);

                        delete from ProductInfo where Id = 10025;

                        select 
                            * 
                        from 
                            ProductInfo

                    end
                go



    2.2 调用存储过程。

        关键字:
            "execute / exec"。

        语法:
            exec 存储过程名 参数列表

        例如:

            2.2.1 调用一个无参的存储过程。

                exec proc_productInfo

            2.2.2 调用一个有参的存储过程。

                exec proc_addProductInfo 'isbn123456', '毛泽东选集', 12, 59.99, 288, '一代伟人的气势磅礴作品!'



    2.3 修改存储过程。

        关键字:
            "alter" 和 "procedure / proc"。

        语法:
            alter proc/procedure 存储过程名称 参数列表
            as
                begin
                    T-SQL语句
                end
            go


        例如:

            alter proc proc_productInfo
            as
                begin

                    select 
                        pi.*,
                        pti.ProductTypeName
                    from
                        ProductInfo pi
                    inner join
                        ProductTypeInfo pti
                    on
                        pi.ProductTypeId = pti.ProductTypeId

                end
            go 

    

    2.4 删除存储过程。

        关键字:
            "drop" 和 "procedure / proc"。

        语法:
            drop proc/procedure 存储过程名称 
            go

        例如:

            drop proc proc_productInfo
            go

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server 存储过程是一组预编译的 T-SQL 语句,它们被存储在数据库中,并可以通过名称调用执行。存储过程可以带参数,也可以返回结果集或输出参数。存储过程可以用于实现复杂的业务逻辑、数据访问控制等功能。 以下是一个简单的 SQL Server 存储过程示例: ``` CREATE PROCEDURE GetCustomers @City nvarchar(50) AS BEGIN SELECT * FROM Customers WHERE City = @City END ``` 以上存储过程接收一个城市名称作为参数,然后返回该城市的所有客户记录。 执行存储过程的语法如下: ``` EXEC GetCustomers 'Los Angeles' ``` 以上语句将调用名为 GetCustomers 的存储过程,并将 'Los Angeles' 作为参数传递给它。 ### 回答2: SQL Server存储过程是一组预编译的SQL语句和命令的集合,它们被打包成一个单元,然后在需要的时候被调用执行。存储过程通常用于处理和管理数据库中的复杂逻辑和业务规则。 存储过程的主要优势之一是提高了数据库的性能。当存储过程创建后,它会被编译,并且在后续的调用过程中可以重复使用编译结果,从而减少了每次执行查询所需的时间。此外,存储过程还可以降低网络流量,因为只需要向数据库发送一条命令,而不是多次发送多个查询。 另一个优势是存储过程可以更好地保护数据库的安全性。通过存储过程,可以限制用户对数据库中的特定数据和操作的访问权限。这样可以防止用户直接修改删除或插入数据库中的数据,同时还可以记录用户对数据库的操作,以便进行审计。 此外,存储过程还有以下特点: 1. 可以接受输入参数和返回输出参数,使得存储过程可以根据不同的输入进行不同的操作,并返回结果给调用者。 2. 可以包含流程控制语句,如条件判断和循环,使得存储过程可以实现更复杂的业务逻辑。 3. 可以在一个事务中执行多个SQL语句,从而保证了数据库的一致性和完整性。 4. 可以被其他存储过程脚本调用,实现代码的复用和模块化。 总之,SQL Server存储过程是一种强大的数据库工具,可以提高性能、保护安全性,并且具有代码复用和模块化的优点。它在处理和管理数据库中的复杂逻辑和业务规则方面发挥着重要的作用。 ### 回答3: sqlserver存储过程是一组预先编译的、可重用的SQL代码,它被存储在数据库中并可以通过名称调用执行。存储过程可以接受输入参数,并返回一个或多个结果集,以满足特定的业务需求。 使用存储过程有以下几个优点: 1. 提高性能:存储过程数据库中进行预编译,可以减少网络传输和编译时间。此外,存储过程还可以对数据库进行优化,以提高查询的执行速度。 2. 提高安全性:存储过程可以限制对数据库的直接访问,通过存储过程执行SQL语句,可以有效地防止恶意的数据操作和SQL注入攻击。 3. 降低维护成本:存储过程可以被多个应用程序共享和重用,这样可以减少代码重复的工作量。当需要对某个业务逻辑进行修改时,只需要修改存储过程的代码,而不必修改多个应用程序。 4. 支持事务处理:存储过程中可以包含事务管理的逻辑,可以确保数据的一致性和完整性。在存储过程中,可以使用BEGIN TRANSACTION、COMMIT和ROLLBACK语句来管理事务。 5. 提高可维护性:在存储过程中,可以定义变量、条件判断、循环语句等,使得存储过程更加灵活和可控。此外,存储过程还可以使用异常处理机制来捕获和处理异常情况。 总而言之,sqlserver存储过程具有提高性能、提高安全性、降低维护成本、支持事务处理以及改善可维护性的优点。使用存储过程可以有效地提升数据库应用程序的开发效率和运行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值