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

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

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

java中形参的可变参数的定义(如String... args) .

如果有下面的一个笔试题: 已知我们有如下的调用关系 logIt("log message 1 "); logIt("log message2","log message3"); logIt("log message4","log message5","log message6"); 请问下面的答案中哪个是正确的 A. public void logIt(String * msgs) B.

<django中render_to_response的可选参数和使用方法>

在django官方文档中有比较详细的介绍,在此我按照自己的理解适当的阐述一下: return render_to_response(①'my_template.html', ②my_data_dictionary, ③context_instance=RequestContext(request) )①template_name 毫无疑问这个就是你要渲染的模板的路径下的模板名,(一个.html文件),注意:这个参数是必须要求有的,假如没有的话是会报错的.(官方文档阐述:The full name

可选参数、命名参数、.NET的特殊类型、特性

1.可选参数和命名参数    1.1可选参数        语法:            [修饰符] 返回类型 方法名(必选参数n,可选参数n)        注意:            1.必选参数可以不存在,也可以有多个:可选参数可以有1个或多个            2.可选参数必须放在必选参数之后            3.可选参数在定义时需要赋初始值            4.可选参数之间也需要使用,进行分隔            5.调用可选参数时,不能跨参数赋值    1.2命名

C#中的 具名参数 和 可选参数

具名参数 和 可选参数 是 C# framework 4.0 出来的新特性. 一. 常规方法定义及调用 public void Demo1(string x, int y) { //do something... } public void Main() { //调用 Demo1("similar", 22); } 调用时,参数顺序(类型)必须与声明一致,且不可省略. 二. 可选参数的声明及调用 可选参数分为两种情况: 1. 部分参数可选:   2. 全部参数都是可选 //部分可选(x

Objective-C中可选参数的实现

Objective-C中可选参数的API也表多,例如: - (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);<pre name="code" class="objc">- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id /*&

C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int -- 查

编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义 Gymnastics 类和 School 类,它们都是 ComputerAverage 的子类。Gymnastics 类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分;School 中计算平均分的方法是所有科目的分数之和除以总科目数。 要求:定义ComputerAv

题目: 编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数. 定义 Gymnastics 类和 School 类,它们都是 ComputerAverage 的子类. Gymnastics 类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分: School 中计算平均分的方法是所有科目的分数之和除以总科目数. 要求:定义ComputerAverage的对象为上转型对象,并调用重写的方法averge. 题目用到:1.方法的多态

关于pb中方法的参数的定义与使用

在这个方法中定义了两个参数,定义了参数的名称与类型,还有返回值的类型(不知道返回值与参数的类型不同会怎么样) 上面定义两个参数,然后传到gf_get_max()这个方法里面, 其实gf_get_max()的作用就是对参数做一定规律的处理然后返回值, 原文地址:https://www.cnblogs.com/thomasbc/p/8470591.html

【工作中遇到的问题】可选参数必须为引用类型、可以为 null 的类型或声明为可选参数。 参数名: parameters

今天上班来发现收到新的报错邮件,里面出现一个新的报错. “Method(Int32, Int32, Int32, Int32, Int32, Int32, System.String, System.String)”的不可以为 null 的类型“System.Int32”的参数“param”” 我这个方法本来是要传8个参数,没有的就传默认值. 现在一看报错详情,原来是异步发来的时候,请求参数没传全. 这个时候整个人傻逼了.....为神马没传默认参数.... 正想气势冲冲的找前端去理论.这时脑袋灵