2010-07-19 5 views
10

J'ai une fonction définie par l'utilisateur qui est utilisée dans de nombreuses procédures stockées qui me renverra une certaine valeur. Si c'est possible pour moi d'ajouter un nouveau paramètre optionnel au même.Paramètre facultatif dans le serveur SQL

Si je ne transmets aucune valeur, elle devrait être nulle et si je lui transmets une valeur, elle devrait le prendre. Je ne veux pas aller et changer toutes les procédures stockées pour le faire.

code Exemple

dbo.CalculateAverageForUser(userid int) 

Puis-je utiliser dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)

+1

Si vous publiez code ou XML, ** S'il vous plaît ** mettre en évidence les lignes dans l'éditeur de texte et cliquez sur le bouton « code » (101 010) sur la barre d'outils éditeur bien le format et la syntaxe le mettent en évidence! –

Répondre

12

Si vous ne voulez pas aller régler toutes vos procédures stockées existantes qui font référence à la fonction alors je pense que vous devez créer une nouvelle fonction avec le code de votre existant alors

CREATE FUNCTION CalculateAverageForUser2 
(
    @userid int, 
    @param2 nvarchar(10) = NULL 
) 
RETURNS float 
AS 
/*Code from existing function goes here*/ 

juste changer la fonction existante à ce qui suit

ALTER FUNCTION CalculateAverageForUser 
(
@userid int 
) 
RETURNS float 
AS 
BEGIN 
RETURN dbo.CalculateAverageForUser2(@userid, DEFAULT) 
END 
3

Je pense que la meilleure façon est de faire un CalculateAverageForUserAndType de procédure stockée (int userid, le type NVARCHAR (10)) Mettez votre code d'origine à l'intérieur de la nouvelle procédure. Puis changer CalculateAverageForUser à

dbo.CalculateAverageForUser(int userid) 
AS 
BEGIN 
    EXEC CalculateAverageForUserAndType userid, NULL 

END 

De cette façon, vous pouvez lentement migrer vers votre nouvelle procédure stockée et votre ancien fonctionne toujours.

+0

Cela devrait bien se passer. Dommage que vous ne pouvez pas surcharger, ainsi que d'utiliser les paramètres par défaut. Mais alors SQL n'est pas C++ .... – Ragster

+0

Cela ne fonctionnera pas. Vous ne pouvez pas appeler les procédures stockées depuis les fonctions. –

+0

même idée encore mais avec des fonctions. –

Questions connexes