Sql server 当SQL Server过程参数可以为null且具有默认值时,这意味着什么?

Sql server 当SQL Server过程参数可以为null且具有默认值时,这意味着什么?,sql-server,stored-procedures,Sql Server,Stored Procedures,我今天遇到了这样一种情况:来自SQL Server 2016实例的以下过程与SQL Server 2008 R2不向后兼容 我的问题是,这两个过程的功能区别是什么 请注意,在类型[int]之后添加了NULL,这不会在SQL Server 2008 R2上编译: CREATE PROCEDURE AmazingProcedure1 (@Value int NULL = NULL) AS BEGIN -- PROCEDURE SELECT 'Dummy Value' END

我今天遇到了这样一种情况:来自SQL Server 2016实例的以下过程与SQL Server 2008 R2不向后兼容

我的问题是,这两个过程的功能区别是什么

请注意,在类型
[int]
之后添加了
NULL
,这不会在SQL Server 2008 R2上编译:

CREATE PROCEDURE AmazingProcedure1
    (@Value int NULL = NULL) 
AS
BEGIN   -- PROCEDURE
    SELECT 'Dummy Value'
END     -- PROCEDURE
此过程在SQL Server 2008 R2上编译,一直编译到2016年。注意,我仍然可以向过程传递NULL

CREATE PROCEDURE AmazingProcedure2
    (@Value int = NULL) 
AS
BEGIN  -- PROCEDURE
    SELECT 'Dummy Value'
END    -- PROCEDURE
请参阅

NULL | NOT NULL确定在 参数默认值为NULL


对于SQL Server 2008R2,它不支持
NULL | notnull
。等号后的NULL是默认值。这意味着,如果没有提供参数,它将接受NULL值。

Ah,因此NULL是默认值,这意味着即使未明确定义可空性,我仍然可以传递NULL。谢谢