当前位置:Gxlcms > mysql > MSSQL中存储过程的可选参数的定义和使用

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

时间:2021-07-01 10:21:17 帮助过:65人阅读

可选参数的存在,可以极大的降低代码的重复冗余。在数据库开发中,也是如此。现在针对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查询。

人气教程排行