【问题标题】:SQL Server Stored Procedure Default ValuesSQL Server 存储过程默认值
【发布时间】:2015-11-12 02:37:38
【问题描述】:

我想创建一个 SQL Server(目前为 2008)存储过程,其中定义了未提交的参数。 Google 和 MS.com 提出以下建议,但不起作用:

ALTER PROCEDURE [Contracts].test2
    @first int = 6, -- default value of 6
    @second int,    
    @third int      
AS
BEGIN
    SELECT @first, @second, @third;
END

结果:0 |输入值 |输入值

提前致谢

【问题讨论】:

  • 你能包括你用来调用这个的代码吗?您是使用 T-SQL 还是其他类似 C# 的方式调用它?如果您使用命名参数并排除可选参数,这应该可以正常工作。
  • 如何调用程序?
  • 在 SQL Fiddle 中工作正常(减去分号):sqlfiddle.com/#!3/fb85f/1
  • 嗯,感谢您的反馈,我正在使用 NaviCat 11 创建/测试。 . .当我在 SSMS 中打开相同的(NaviCat 创建的)SP 时,它打开为:

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


【解决方案1】:

你必须像这样调用存储过程,它会工作。

exec test2 @second=1, @third=2

【讨论】:

    【解决方案2】:

    嗯,感谢您的反馈,我正在使用 NaviCat 11 创建/测试。 . .当我在 SSMS 中打开相同的(NaviCat 创建的)SP 时,它打开为:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [Contracts].[test2]
        @first int = 6, -- NULL default value
        @second int,    -- Default value of 2
        @third int      -- Default value of 3
    AS
    
    BEGIN
    
        SELECT @first, @second, @third;
    
    END
    

    然后“正确”运行(而在 NaviCat 中,由于某种原因,只要没有输入参数值,@first 就会返回零)。

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2010-11-07
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多