Est-il possible de créer une procédure stockée en tant que
CREATE PROCEDURE Dummy
@ID INT NOT NULL
AS
BEGIN
END
Pourquoi n'est-il pas possible de faire quelque chose comme ça?
Vous pouvez vérifier sa valeur NULL dans le sproc et RAISERROR
pour signaler l'état à l'emplacement de l'appelant.
CREATE proc dbo.CheckForNull @i int
as
begin
if @i is null
raiserror('The value for @i should not be null', 15, 1) -- with log
end
GO
Puis appelez:
exec dbo.CheckForNull @i = 1
ou
exec dbo.CheckForNull @i = null
Votre code est correct, raisonnable et même une bonne pratique. Vous devez simplement attendre SQL Server 2014, qui prend en charge ce type de syntaxe.
Après tout, pourquoi attraper au moment de l'exécution quand vous pouvez au moment de la compilation?
Voir aussi ce document msdn et recherchez Natively Compiled
dedans.
Comme l'indique dkrez, la nullité n'est pas considérée comme faisant partie de la définition du type de données. Je me demande encore pourquoi pas.
Oh, eh bien, il semble que je ne puisse pas éditer le post de @Unsliced car "Ce montage diffère de l'intention initiale du message. Même les modifications qui doivent apporter des modifications drastiques doivent s'efforcer de préserver les objectifs du propriétaire du message".
Donc (@ crokusek et tous les intéressés), voici ma solution proposée:
Vous pouvez vérifier sa valeur NULL dans le sproc et RAISERROR
pour signaler l'état à l'emplacement de l'appelant.
CREATE proc dbo.CheckForNull
@name sysname = 'parameter',
@value sql_variant
as
begin
if @value is null
raiserror('The value for %s should not be null', 16, 1, @name) -- with log
end
GO
Puis appelez:
exec dbo.CheckForNull @name 'whateverParamName', @value = 1
ou
exec dbo.CheckForNull @value = null