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