Sql server 存储过程可选参数默认值分配

Sql server 存储过程可选参数默认值分配,sql-server,Sql Server,我有一个存储过程的参数,我想让它成为可选的,并从表中指定默认值,我该怎么做 ALTER PROCEDURE [DBO].[Test] @planId int = 1 ( This I can do ) 但我想这样做 @planId int = ( Select Id from Table1 Where name = ‘ABC’) ‘ Assign default id from a table 如果要执行此操作,只需在开始时指定0,然后在过程的第一行将此值写入该变量 ALTE

我有一个存储过程的参数,我想让它成为可选的,并从表中指定默认值,我该怎么做

ALTER PROCEDURE [DBO].[Test]

      @planId int = 1  ( This I can do )
但我想这样做

@planId int = ( Select Id from Table1 Where name = ‘ABC’) ‘ Assign default id from a table

如果要执行此操作,只需在开始时指定0,然后在过程的第一行将此值写入该变量

ALTER PROCEDURE [DBO].[Test]
@planId int = 0
AS
BEGIN
SET @planId = ( Select Id from Table1 Where name = ‘ABC’)
...
...
...
END

如果要执行此操作,只需在开始时指定0,然后在过程的第一行将此值写入该变量

ALTER PROCEDURE [DBO].[Test]
@planId int = 0
AS
BEGIN
SET @planId = ( Select Id from Table1 Where name = ‘ABC’)
...
...
...
END

在存储过程中,可以声明和设置值。在这种情况下,您可以将@planId设置为身体中所需的任何内容:

CREATE PROCEDURE procedureName
    @planId int = null output
AS
    IF @planId = null
      Begin
      SET @planId = ( Select Id from Table1 Where name = ‘ABC’) 
      End
    ELSE --> then they gave you the value

在存储过程中,可以声明和设置值。在这种情况下,您可以将@planId设置为身体中所需的任何内容:

CREATE PROCEDURE procedureName
    @planId int = null output
AS
    IF @planId = null
      Begin
      SET @planId = ( Select Id from Table1 Where name = ‘ABC’) 
      End
    ELSE --> then they gave you the value

我会使用NULL而不是0作为默认值,然后在设置它之前不使用get来检查它是否为NULL。我会使用NULL而不是0作为默认值,然后不使用get来检查它是否为NULL,然后再设置它。这就是我现在所做的,所以我无法在声明时从表值分配默认select。-谢谢。我在示例的开头添加了更多内容。我有一些基本相同的东西,它设置了值。@User228777是的,不幸的是,没有办法做到这一点。Kyra和Baaju,我知道传递Null并在存储的过程代码中进行检查,并进行相应的处理,我认为如果在声明中指定defalut值会很好,但正如您所说,我不能这样做。我将按原样使用当前存储的进程。-谢谢这就是我现在所做的,所以我无法在声明时从表值中指定默认select。-谢谢。我在示例的开头添加了更多内容。我有一些基本相同的东西,它设置了值。@User228777是的,不幸的是,没有办法做到这一点。Kyra和Baaju,我知道传递Null并在存储的过程代码中进行检查,并进行相应的处理,我认为如果在声明中指定defalut值会很好,但正如您所说,我不能这样做。我将按原样使用当前存储的进程。-谢谢