【问题标题】:What is meant by a parameter in Stored Procedures in SQL?SQL中存储过程中的参数是什么意思?
【发布时间】:2018-01-15 14:53:38
【问题描述】:

在创建存储过程时,SQL Server 中的参数定义是什么?是声明的变量吗?例如

declare @snapLY table (hotel_id tinyint, import_date date) 
insert into @snapLY select hotel_id, max(import_date) from MYTABLE
group by hotel_id 

【问题讨论】:

  • 参数一般是指传入存储过程的变量。局部变量是指在body中声明的变量。
  • 任何语言中的参数都是传入和(有时)传出函数或子例程的值或对象。在您的示例中,它是 hotel_id 和 import_date。
  • 参考docs.microsoft.com/en-us/sql/relational-databases/… .. 那些在create procedure 之后但在AS 之前定义的@variables

标签: sql sql-server stored-procedures


【解决方案1】:

参数允许在函数/过程及其调用者之间交换数据。在 SQL 中,存储过程有两种类型的参数,

  1. 输入参数,以及
  2. OUTPUT 或 OUT 参数

INPUT 参数接收作为参数传递的值(由调用者),并且它在本地范围/块内保持可用(类似于局部变量),而 OUTPUT 参数用于声明返回类型和返回变量-姓名。

“INPUT”关键字不明确用于声明 INPUT 参数,而您必须使用“OUTPUT”或“OUT”关键字声明 OUTPUT 参数。

您不需要使用“DECLARE”关键字(类似于大多数其他语言,方法签名中的参数不需要显式数据类型声明)。

在示例中注意以下几点:

  1. "@dob" 是一个 INPUT 参数(充当局部变量)
  2. “@yr”和“@mths”是 OUTPUT 参数(用于声明返回类型和返回变量名)
  3. 由于 Proc 有 2 个 OUTPUT 参数,它也有 2 个 SELECT 语句以返回 2 个值。
CREATE PROCEDURE CalcAge2 @dob date, @yr int OUTPUT, @mths int OUTPUT
AS
Select @yr = (DateDiff(Day, @dob, GetDate()))/365;
Select @mths = ((DateDiff(Day, @dob, GetDate()))%365) / 30.5;

--调用带有OUTPUT参数的存储过程:

DECLARE @yr int, @mths int
EXEC CalcAge2 '20010225', @yr OUTPUT, @mths OUTPUT
SELECT 'You are '+Cast(@yr As varchar)+' years & '+Cast(@mths As varchar)+' months old'

HTH。

【讨论】:

  • 一个参数并不总是INPUT它也可能只是OUTPUT
  • @GuidoG:Asker 没有详细询问参数类型,但我已经添加完成。
  • 好多了,最好是完整的答案。 +1
【解决方案2】:

与函数参数/参数相同。但是您可以使用 IN 或 OUT 关键字指定哪个是输入参数,哪个是输出参数。 IN 参数将从用户那里获取输入,而 OUT 参数将为您提供结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 2012-04-03
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多