【问题标题】:Stored Procedure argument "NULL" or "= NULL"存储过程参数“NULL”或“= NULL”
【发布时间】:2019-12-20 08:32:41
【问题描述】:

有什么区别:

CREATE PROCEDURE [dbo].[MyProcedure] 
                @MyArgument INT NULL

CREATE PROCEDURE [dbo].[MyProcedure] 
                @MyArgument INT = NULL

我使用了第一个,它在 SQL Server 2016 中运行良好。但是 SQL Server 2012 不接受它。 两者都适用于 SQL Server 2016,我现在使用第二个没有问题。 但是知道其中的区别会很有趣。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    他们不做同样的事情。第二个为调用者未指定一个的情况定义一个默认值。第一个没有。

    “本机编译存储过程的 Transact-SQL 语法”grammar 允许将参数数据类型声明为允许 NULLNOT NULL。这是为 Hekaton(内存优化表)引入的。

    尽管“存储过程的 Transact-SQL 语法”中的语法没有记录为支持它,但它看起来允许 NULL 但拒绝 NOT NULL 并引发错误。

    参数“@MyArgument”已声明为 NOT NULL。非空 仅本地编译的模块支持参数,除了 用于内联表值函数。

    明确指定NULL 没有任何价值——这是默认选项,也是唯一的选项。常规存储过程没有声明性语法来指示参数必须是NOT NULL

    【讨论】:

      【解决方案2】:

      他们做不同的事情:

      1) @MyArgument INT NULL - NULL 值允许 用于参数@MyArgument

      2) @MyArgument INT = NULL - 参数@MyArgument的默认值为NULL

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-04
        • 1970-01-01
        相关资源
        最近更新 更多