2010-02-25 21 views
7

¿Podemos devolver el valor nulo del procedimiento almacenado? No quiero usar collase o isnull. Quiero capturar NULL en la interfaz. Es posible ?podemos devolver un valor nulo del procedimiento almacenado

Editar:

estoy usando Sql Server 2005

por ejemplo. donde quiero usar

CREATE PROCEDURE [Authentication].[spOnlineTest_CheckLogin] 

    @UserName NVARCHAR(50) 
AS 
BEGIN TRY 
    BEGIN TRAN 
        COMMIT TRAN 
    RETURN NULL 
     END TRY 

error El procedimiento 'spOnlineTest_CheckLogin' intentó devolver un estado de NULL, que no está permitido. Se devolverá un estado de 0 en su lugar. Msg 0, nivel 11, estado 0, línea 0 Ocurrió un error grave en el comando actual. Los resultados, si los hay, deben descartarse.

+0

¿Qué base de datos está utilizando? SQL Server, MySQL, etc. –

+0

@Justin: Q está etiquetado como T-SQL. Es el Servidor SQL. –

+1

@Mehrdad Afshari, Sybase también utiliza T-SQL –

Respuesta

7

No, el tipo de devolución de un procedimiento almacenado es INT y no puede ser nulo.

+0

Los parámetros de entrada a los procedimientos almacenados pueden ser INT y aún así asignarse NULL, ¿por qué no RETURN? –

+0

@Chris: así es como está diseñado el idioma. Sospecho que para el caso de uso previsto como un estado de falla/éxito, no ser nulo tiene sentido. –

3

uso un parámetro de salida, ejemplo

CREATE PROCEDURE Test 
    @UserName NVARCHAR(50), @Status int output 
AS 
BEGIN TRY 
    BEGIN TRAN 
        COMMIT TRAN 
    set @Status = null 
     END TRY 
     begin catch 
     end catch 
     go 

entonces lo llaman como esto

declare @s int 
    set @s =5 
    exec Test'bla',@s output 
    select @s --will be null 
0

Se puede pensar en un proc como sigue. Permítame primero establecer el contexto. Es posible que tengamos una tabla Table1(id int, name varchar(2), Address varchar(2)) y desee obtener la identificación y, si no la encontramos, será nula. Por lo tanto, podríamos escribir un proceso como el siguiente:

CREATE PROCEDURE GetId 
    @Name VARCHAR(50), @Status int output 
AS 
BEGIN TRY 
    set @Status = null 
    select @Status = id from Table1 where [email protected] 

Esto funcionará para usted.

Cuestiones relacionadas