2012-01-30 8 views
1

でエラーメッセージを作成し、私は私のstored procedure内で次のコードを持って、私はそれが動作しません知っていると動作しないはずですが、私は私の意図を説明したかった:トラブルSQL Serverの

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 

誰も教えてもらえます私は何をすべきか?またはこのタイプの文字列を作成する際のリンク。

EDIT:ちょうど@ErrorMessages varchar;を使用して

declare @ErrorMessages varchar(255); 

はあなたを与える:@Datesはdatetimeの両方であると言うことを忘れた場合、エラーメッセージが

+3

は '@のErrorMessages'のサイズを指定します - どのように動作しませんか? @PreviousDepositEndDateらはどのようなエラーが表示されますか? @AlexK。 –

+0

その日時を言うのを忘れた – 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)

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) 

エラー番号を指定するwan't場合は、まずsp_addmessageを使用して、raiserrorで参照することができ、エラーメッセージを、定義する必要があります。 @PreviousDepositEndDate@TenancyAgreementStartDateの種類に応じて、いくつかのキャストを挿入する必要があります。ここで

+0

+1また、2つの日付変数にキャストが必要 –

+0

@AlexK。 : あなたが正しい!ありがとう! – Mithrandir