SQL Server存储过程:通过查询执行设置输入参数的默认值

时间:2016-08-04 02:55:23

标签: sql-server stored-procedures default-value

假设我有以下存储过程:

CREATE PROCEDURE test
   @my_var varbinary
AS
   SELECT @my_var as my_var

但是我想修改它以使@my_var具有默认值。我不知道这个值究竟是什么,但我知道在数据库中的位置。

类似的东西:

declare @var int
SELECT @var = my_variable from my_table where something = 'what I need'
GO

CREATE PROCEDURE test
    @my_var varbinary = @var
AS
    SELECT @my_var as my_var

然而,这失败了。 @var似乎超出了范围。

是否有可能做某种事情?

谢谢!

1 个答案:

答案 0 :(得分:2)

在运行时使用值:

CREATE PROCEDURE test
  @my_var varbinary = NULL
AS
BEGIN
IF   @my_var IS NULL
    SELECT @my_var = my_variable from my_table where something = 'what I need'

  SELECT @my_var as my_var
END

要在创建时使用值,请构建CREATE PROC字符串并执行它

declare @var int
declare @SQL VARCHAR(4000)

SELECT @var = id from sysobjects where id =3



SET @SQL = 'CREATE PROCEDURE test @my_var varbinary = ' + CAST(@var AS VARCHAR(20)) + '
AS
    SELECT @my_var as my_var'

EXEC(@SQL)

正如我所提到的......如果你只创造一次,那为什么还要把它变得复杂呢?如果您要多次创建它,那么您应该在运行时执行此操作。如果要部署到许多数据库,可能会有一些调用来执行此操作,但在这种情况下,您可能需要考虑将其包装到数据库项目中