IT技术互动交流平台

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

来源:IT165收集  发布日期:2016-05-09 21:55:22

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

Tag标签: 参数   过程  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规