欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MSSQL中存储过程的可选参数的定义和使用

程序员文章站 2022-05-30 18:46:35
...

可选参数的存在,可以极大的降低代码的重复冗余。在数据库开发中,也是如此。现在针对MSSQL中存储过程的可选参数的定义和使用进行基本的介绍,留作备忘。 #准备工作: 在db_test中建立一张测试表T_test: USE db_test; CREATE TABLE dbo.T_test ( Id INT IDE

可选参数的存在,可以极大的降低代码的重复冗余。在数据库开发中,也是如此。现在针对MSSQL中存储过程的可选参数的定义和使用进行基本的介绍,留作备忘。


#准备工作:

在db_test中建立一张测试表T_test:

USE db_test;

CREATE TABLE dbo.T_test
(
Id INT IDENTITY(1,1) NOT NULL
,Name NVARCHAR(20) NOT NULL
,Sex BIT DEFAULT(0)
);




插入一些数据:

INSERT INTO dbo.T_test(Name,Sex)
VALUES(N'NAME1','1')
,(N'NAME2','0')
,(N'NAME3','1')
,(N'NAME4','0');


查询测试数据:

SELECT Id,Name,Sex
FROM dbo.T_test;
结果为:

Id Name Sex

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

1 NAME1 1
2 NAME2 0
3 NAME3 1
4 NAME4 0


#存储过程

创建一个存储过程:

IF OBJECT_ID('dbo.up_test_get_name_by_id','P') IS NOT NULL
DROP PROC dbo.up_test_get_name_by_id;
GO

CREATE PROC dbo.up_test_get_name_by_id
@Name AS NVARCHAR(20) OUT
,@Id AS INT = 1  --DEFAULT VALUE: 1
,@Sex AS BIT = 1 --DEFAULT VALUE: 1
AS
BEGIN 
SELECT @Name = Name
FROM dbo.T_test
WHERE  Id = @Id
  AND Sex = @Sex;

END
GO


对存储过程进行调用:

1)不传递ID和Sex

DECLARE @Name NVARCHAR(20);
EXEC dbo.up_test_get_name_by_id @Name OUT;

SELECT @Name AS NAME;
结果为:

NAME

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

NAME1


说明:

可见,当调用存储过程的时候不传递ID,则存储过程会使用(存储过程)定义时设定的ID的默认值1,Sex默认值为1 。


2)传递ID

DECLARE @Name NVARCHAR(20);
EXEC up_test_get_name_by_id @Name OUT,'3';

SELECT @Name AS NAME;
结果为:

NAME

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

NAME3


说明:

当调用时传递ID,则存储过程在执行的时候会使用从外部传递进来的ID值,因为没有传递进来Sex的值,故使用Sex默认值1进行SQL查询。