2010-07-19 26 views
10

Tengo una función definida por el usuario que se utiliza en muchos procedimientos almacenados que me devolverá algún valor. Si me es posible agregar un nuevo parámetro opcional al mismo.Parámetro opcional en el servidor SQL

Si no paso ningún valor, debería ser nulo y, si paso algún valor, debería tomarlo. No quiero ir y cambiar todos los procedimientos almacenados para hacerlo.

código Ejemplo

dbo.CalculateAverageForUser(userid int) 

¿Puedo usar dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)

+1

Si publica código o XML, por favor ** ** destacar aquellas líneas en el editor de texto y haga clic en el "código" (101 010) en la barra de herramientas editor para bien formato y sintaxis resaltarlo! –

Respuesta

12

Si no quiere ir ajustando todos los procedimientos almacenados existentes que hacen referencia a la función, entonces creo que se necesita para crear una nueva función con el código de su existente

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

A continuación, sólo cambiar la función existente para el siguiente botón

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

creo que la forma más fácil es hacer una CalculateAverageForUserAndType procedimiento almacenado (int id de usuario, el tipo nvarchar (10)) Ponga su código original dentro de la nueva procedimiento. A continuación, cambiar a CalculateAverageForUser

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

END 

esta manera se puede migrar lentamente a su nuevo procedimiento almacenado y su viejo todavía funciona.

+0

Esto debería funcionar muy bien. Es una pena que no puedas sobrecargar, así como usar los parámetros predeterminados. Pero entonces SQL no es C++ .... – Ragster

+0

Esto no funcionará. No puede llamar a procedimientos almacenados desde dentro de funciones. –

+0

misma idea todavía pero luego con funciones. –

Cuestiones relacionadas