2009-11-27 8 views
76

J'écris des procs stockés dans SQL Server 2008, et je me demandais si le concept de paramètres d'entrée optionnels est possible ici? Je suppose que je pourrais toujours passer en NULL pour les paramètres que je ne veux pas utiliser, vérifier la valeur dans le proc stocké, puis prendre des choses à partir de là, mais j'étais intéressé si le concept est disponible ici. Merci!paramètres facultatifs dans SQL Server stocké proc?

+1

Prenez une longue lecture sur le site de Erland, il a une grande information sur les conditions de recherche dynamiques: http://www.sommarskog.se/dyn-search.html –

Répondre

140

Vous pouvez déclarer comme ceci

CREATE PROCEDURE MyProcName 
    @Parameter1 INT = 1, 
    @Parameter2 VARCHAR (100) = 'StringValue', 
    @Parameter3 VARCHAR (100) = NULL 
AS 

/* check for the NULL/default value (indicating nothing was passed */ 
if (@Parameter3 IS NULL) 
BEGIN 
    /* whatever code you desire for a missing parameter*/ 
    INSERT INTO ........ 
END 

/* and use it in the query as so*/ 
SELECT * 
FROM Table 
WHERE Column = @Parameter 
+0

Merci pour vos deux réponses! – larryq

+0

que se passe-t-il si le paramètre est un type d'identificateur unique? ex. @userId uniqueidentifier –

+1

Répondre à @RKSharma pour tous ceux qui se demandent aussi - cela fonctionne exactement de la même façon avec les identifiants uniques. – rinukkusu

41

Oui, c'est le cas. Déclarer paramètre comme si:

@Sort varchar(50) = NULL 

Maintenant, vous n'ont même pas passer le paramètre par défaut Il NULL (ou tout ce que vous choisissez de par défaut)..

+0

Vous n'avez même pas besoin du '= NULL' –

+3

Êtes-vous sûr de n'en avoir pas besoin? –

+32

OMG Poneys, si vous n'incluez pas = , alors le paramètre sera requis. Vous pouvez le passer comme NULL, mais ensuite vous déplacez simplement cette logique à l'application (s) qui utilisent la procédure. –

Questions connexes