2012-01-30 4 views
1

내가 가지고있는 내 코드 조각 다음 내 stored procedure, 나는 그것이 작동하지 않고 일을하지 말아야 알고 있지만 나는 내 의도를 설명하기 위해 원 :문제 작성 오류 메시지

declare @ErrorMessages varchar; 
set @ErrorMessages = 'An existing deposit on this property ends after the intended start date for the new deposit. ' + 
    'Existing End Date: ' + @PreviousDepositEndDate + '. Intended Start Date: ' + @TenancyAgreementStartDate 
    raiserror 50002 @ErrorMessages 

하는 사람이 말할 수를 내가 뭘 해야하는지? 또는이 유형의 문자열을 만드는 데 필요한 링크.

편집 : 단지 @ErrorMessages varchar;를 사용

declare @ErrorMessages varchar(255); 

당신을 제공하십시오 @Dates이 datetime의 모두 말을 잊어 버렸 오류 메시지가

+3

이 @ ErrorMessages''에 대한 크기를 지정을 - 어떻게 작동하지 않습니까? 어떤 오류가 표시됩니까, 어떤 유형이 @PreviousDepositEndDate 외입니까? –

+0

@AlexK. 그것의 datetime – ediblecode

답변

0

여기에 약간 다른 버전의 어떤은 C의 printf와 스타일 에뮬레이트하기 때문에 같은 어떤 사람들 :

-- Test data 
declare @PreviousDepositEndDate varchar(30) = cast(getdate() - 1 as varchar(30)) 
    , @TenancyAgreementStartDate varchar(30) = cast(getdate() as varchar(30)) 
-- Throw 
raiserror (N'An existing deposit on this property ends after the intended start date for the new deposit. Existing End Date: %s. Intended Start Date: %s', 
      16, -- Severity, 
      1, -- State, 
      @PreviousDepositEndDate, -- First argument. 
      @TenancyAgreementStartDate) -- Second argument. 

더 많은 정보를 원하시면이 MSDN 링크에서 찾을 수 있습니다 http://msdn.microsoft.com/en-us/library/ms178592.aspx

3

이 시도는 문자열로 날짜 변환 할 수 없다는 것입니다 a varchar(1). 오류 번호를 지정 wan't 경우

set @ErrorMessages = 
     'An existing deposit on this property ends after the intended start date for the new deposit. ' + 
     'Existing End Date: ' + 
     @PreviousDepositEndDate + '. Intended Start Date: ' + @TenancyAgreementStartDate 

    raiserror(@ErrorMessages, 16, 1) 

먼저 sp_addmessage를 사용하고 raiserror에서 참조 할 수있는 오류 메시지를 정의해야합니다. @PreviousDepositEndDate@TenancyAgreementStartDate 유형에 따라 캐스트를 삽입해야 할 수 있습니다.

+0

+1 또한 2 날짜 변수 –

+0

@ AlexK에 대한 캐스트가 필요하다는 말을 잊어 버렸습니다. : 네가 옳아! 감사! – Mithrandir