2013-10-24 5 views
1

이것이 최선의 방법인지 확실하지 않지만 다음과 같이 OUTPUT 매개 변수가있는 저장 프로 시저가 있습니다. 내가 공급 존재하지 않는 알고 @site_name이 조건 (@result is null) 사실 적이없는 경우 SQL Server에서 null에 대한 uniqueidentifier 테스트가 작동하지 않는 것 같음

create procedure [dbo].[sp_get_site_idx] 
@site_name varchar(100), 
@result uniqueidentifier output 
as 
begin 
    select @result = [primary_idx_col] from [site] where upper([site].[site_name]) = upper(@site_name); 
    if (@result is null) 
    begin 
    < insert a new row> 
    < run the above select statement again> 
    end; 
end; 

는 사실 @result은 (프로그래밍 언어에서 예외가있을 때와 유사) 정의되지 않은 것으로 보인다. 나는 약간 select 문을 수정하면

create table [site] (
[primary_idx_col] UNIQUEIDENTIFIER DEFAULT NEWID() constraint pk_site_pk primary key, 
... 
); 

이상하게 :

select @result = [primary_idx_col] from [site] where upper([site].[site_name]) = upper(@site_name) group by [primary_idx_col]; 

다음 (@result is null)이 true로 평가되므로

[site]을 만들었습니다.

이 동작을 설명해 주시겠습니까? 처음으로 select 성명서는 무엇입니까? 미리 감사드립니다.

+0

가장 가능성이 @result의 valiable은 NULL 아닌'= NEWID()가 이 간부는, 당신의 가정이 올바른 @Result output' – bummi

+0

@bummi하지 sp_get_site_idx @Result 고유 식별자 선택 @ 결과를 선언 ! 이 문제는 프로 시저가 호출되는 방식과 관련이 없습니다 :'declare @site_index uniqueidentifier; sp_get_site_idx @previously_declared_site_name, @result = @site_idx OUTPUT;을 실행하십시오. –

답변

0

NULL에 대해 UNIQUEIDENTIFIER를 검사 할 수 있습니다.

테스트 데이터베이스에 코드를 넣으려고했는데 논리가 제대로 작동하는 것 같습니다.

나는 당신의 저장 프로 시저를 호출하는 경우 :

DECLARE @RESULT2 UNIQUEIDENTIFIER; 
EXEC dbo.SP_GET_SITE_IDX @SITE_NAME = '<INSERT VALUE HERE>', -- varchar(100) 
    @RESULT = @RESULT2 OUTPUT;-- uniqueidentifier 
SELECT @RESULT2 

가 나는 사이트 이름이 테이블 여부에 여부에 따라 적절한 결과를 얻을.

프로 시저에서 IF에 행을 삽입하지 않습니까?

해당 사이트가 귀하의 테이블에 있는지 확인하십시오.

사이트가 테이블에 있지만 NULL 키/값이있을 수 있습니까? 당신은`같은 sp_get_site_idx` 뭔가를 호출하는 경우

+0

@Allen, 귀하의 신속한 답변에 감사드립니다. 'group by '문이 없으면 플로우는'if' 조건을 지나치지 않습니다 (예외가있는 것처럼). 나는 디버거를 통해 저장된 proc을 실행하기 전에'drop table','create table'을 했으므로 사이트가 존재하지 않는다는 것을 100 % 확신합니다. 또한 위의 과정과 똑같이이 프로 시저를 실행합니다 :'execute sp_get_site_idx @declared_site_name @result = @site_idx OUTPUT; ' –

+0

IF에 ELSE 절을 만들고 @result를 임시 데이터베이스 나 유사한 것으로 인쇄/선택하십시오. 쿼리 실행 내에서 IF 검사에서 어떤 결과가 있는지 확인하여이를 확인할 수 있습니다. –

+0

@Allen, 귀하의 게시물을 답변으로 수락했습니다. 그러나 충분한 담당자가 없으므로 up-vote 수 없습니다 !!!!! –

관련 문제