7

저장 프로 시저에서 Null 값을 반환 할 수 있습니까? 나는 collase 또는 isnull을 사용하고 싶지 않다. 프론트 엔드에서 NULL을 포착하려고합니다. 가능한가?저장 프로 시저에서 null을 반환 할 수 있습니까?

편집 : Sql Server 2005

등을 사용하고

. 내가

CREATE PROCEDURE [Authentication].[spOnlineTest_CheckLogin] 

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

오류 을 사용하고자하는 곳 'spOnlineTest_CheckLogin'절차는 허용되지 않습니다 NULL 상태를 반환하려고했습니다. 대신 상태 0이 리턴됩니다. 메시지 0, 수준 11, 상태 0, 줄 0 현재 명령에서 심각한 오류가 발생했습니다. 결과가 있으면 폐기해야합니다.

+0

어떤 데이터베이스를 사용하고 있습니까? SQL 서버, MySQL 등? –

+0

@ Justin : Q에는 T-SQL 태그가 지정되어 있습니다. 그것은 SQL Server입니다. –

+1

@Mehrdad Afshari, Sybase도 T-SQL을 사용합니다 –

답변

7

아니요, 저장 프로 시저의 반환 형식은 INT이며 null 일 수 없습니다. 다음과 같은

+0

저장 프로 시저에 대한 입력 매개 변수는 INT가 될 수 있으며 NULL을 할당 할 수 있습니다. 왜 RETURN 매개 변수가 필요하지 않습니까? –

+0

@Chris : 그것이 언어가 디자인 된 방식입니다. 나는 의도 된 유스 케이스를 실패/성공 상태로 의심하고, 널이 아니라는 것이 합리적이다. –

3

사용 출력 매개 변수, 예를

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 

다음이

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

과 같이 호출 당신은 PROC 생각할 수 있습니다. 먼저 컨텍스트를 설정해 보겠습니다. 우리는 테이블 Table1(id int, name varchar(2), Address varchar(2))을 가질 수 있으며, id를 얻고 싶다면 발견되지 않을 경우 null이됩니다. 그래서 우리는 다음과 같은 proc을 작성할 수 있습니다 :

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

이 방법이 유용 할 것입니다.

관련 문제