Qu'est-ce que cela signifie quand un paramètre de procédure SQL Server est null-able et a également un défaut?

J'ai rencontré une situation où la procédure suivante d'une instance SQL Server 2016 n'était pas rétrocompatible avec SQL Server 2008 R2.

Ma question est, quelle est la différence de fonctionnalité entre ces deux procédures?

Notez la NULL supplémentaire après le type [int] , cela ne comstack pas sur SQL Server 2008 R2:

 CREATE PROCEDURE AmazingProcedure1 (@Value int NULL = NULL) AS BEGIN -- PROCEDURE SELECT 'Dummy Value' END -- PROCEDURE 

Cette procédure se comstack sur SQL Server 2008 R2 tout au long de l'année 2016. Notez que je peux toujours passer une valeur NULL à la procédure.

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

Veuillez vous reporter à https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql

NULL | NOT NULL Détermine si les valeurs NULL sont autorisées dans un paramètre. NULL est la valeur par défaut

pour SQL Server 2008R2, il ne prend pas en charge la NULL | NOT NULL NULL | NOT NULL . Le signe égal après NULL est la valeur par défaut. ce qui signifie que si le paramètre n'est pas fourni, il prendra une valeur NULL.