SQLserver_存储过程

本文介绍了SQL Server中存储过程的参数类型,包括输入参数和输出参数。详细讲解了输入参数的默认值设定,以及输出参数的使用方法。并提供了一个示例展示如何创建和调用带有输出参数的存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数:

存储过程的参数分为两种,输入参数和输出参数
A)输入参数
在存储过程中,参数与as的位置关系决定了该参数的性质;
(1)
as里面的变量是局部变量,只用与存储过程本身;
as外面的变量是输入参数,在调用这个存储过程的时候就要提供这个参数;
默认参数:
若存储过程需要参数而调用该参数时候不提供参数,则该存储过程无法调用。但是存在给参数设置默认参数,则不需要提供参数也可以调用存储过程;
B)输出参数
在输入参数后面加OUTPUT关键词
调用这个存储过程,在输出参数后必须加OUTPUT关键词;

补充:创建一个变量,用于调用该存储过程。DECLARE

Ps:在创建一个存储过程后,不能在重复调用原来的存储过程名,可以将create修改为alter

当SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。 当 SET NOCOUNT 为
OFF 时,返回计数。

Select top 1 from 表名;子句含义为查询结果只显示首条记录;

举个例子:ALTER --存在的存储过程,若是不存在就用create

ALTER PROCEDURE 存储过程名字
  @uniqueID varchar(32)--参数(一个或者多个)
AS
BEGIN
SET NOCOUNT ON;--赋值-一次只能给一个变量赋值

–UPDATE databaseK3 SET
–isDelete = “1” ,
–operationType = “2”
–WHERE uniqueID = 1

DECLARE @id INT;–定义一个变量id
SELECT TOP 1 @id = id
FROM databaseK3
WHERE (uniqueID = @uniqueID)
ORDER BY id DESC;
–(1)查询首行记录
UPDATE databaseK3 SET
isDelete = ‘1’,
operationType = ‘2’,
updateTime = GETDATE()
WHERE (id = @id);
–(2)修改-将databaseK3中的三个字段修改,当id=参数时候
END

输入参数命名自定义,只要确认在调用该存储过程的时候,参数的数量,顺序,数据类型一一对应即可。

**

例子:

**

ALTER PROCEDURE [dbo].[sp_d_lg_insert] @rmibNumber varchar(50),--原材料检验批次号(抓取送检单号)
                                        @materialName VARCHAR(50), --原材料名称(新增)
                                        @borMaterials VARCHAR(50),--原材料品牌
                                        @RawmManufacturer VARCHAR(50),--原材料制造商
                                        @oorMaterials VARCHAR(50),--原材料产地
                                        @mrmSpecification VARCHAR(50),--原材料规格型号
                                        @incomDate date,--来料检验日期YYYY-MM-DD
                                        @tensileStrength int,--(抗拉)检验结果是否合格 默认合格0
                                        @isQualify int,--(绝缘操作杆(拉杆))检验结果是否合格 默认合格0
                                        @quantity int --送检数量(新增)
--注释:ALTER PROCEDURE [数据库].[函数名]@ 外部参数 数据类型,
--注释:as DECLARE 内部参数 
AS
DECLARE
    @serialNo VARCHAR(50)--序列号(随机编码RGJ00001)
DECLARE
    @rmbNumber VARCHAR(50)--原材料批次号(送检单号+送检数量001)增加送检单号字段,检验手工录入
DECLARE
    @manufactureDate DATE--原材料出厂日期(来料日期往前推1个星期)
DECLARE
    @t int = 1 --常量

    if not exists(select top 1 rmibNumber
                  from d_lg_remove
                  where rmibNumber = @rmibNumber)
        begin
            while @t <= @quantity
                BEGIN
                    --SET NOCOUNT ON;

                    SET @serialNo = 'RGL' + RIGHT('00000' + CONVERT(VARCHAR(50), @t), 5)
                    set @rmbNumber = 'JULG' + RIGHT('00000' + CONVERT(VARCHAR(50), @t), 5)
                    set @manufactureDate = DATEADD(dd, -7, @incomDate)
                    INSERT INTO d_lg_remove (serialNo, rmibNumber, rmbNumber, borMaterials, RawmManufacturer,
                                             oorMaterials, mrmSpecification, manufactureDate, incomDate,
                                             tensileStrength, isQualify, materialName)
                    VALUES (@serialNo, @rmibNumber, @rmbNumber, @borMaterials, @RawmManufacturer, @oorMaterials,
                            @mrmSpecification, @manufactureDate, @incomDate, '0', '0', @materialName)
                    set @t += 1
                END
        end

待写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值