ストアドプロシージャは2つのパラメータを受け入れます@EffectiveStartDateDATETIME
@ EffectiveEndDate DATETIME
私は次のように検証コードを書きました:
IF(@EffectiveStartDate > @EffectiveEndDate)
BEGIN
RAISERROR ('SPName: InsertUpdateLiquidityDateRule: Start Date: %s cannot be greater than End Date %s',11,1,CAST(@EffectiveStartDate AS varchar(30)),CAST(@EffectiveEndDate AS varchar(30)));
RETURN -1
END
ここで何が間違っているのかわかりますか。
SProcのコンパイル中に、「CAST()の近くの構文が正しくありません」というメッセージが表示されました。
指定する値は定数または変数である必要があります。関数名をパラメーター値として指定することはできません。 (MSDNから ストアドプロシージャの実行 )。
あなたはこのようなことをする必要があります:
declare @EffectiveStartDateText varchar(30)
set @EffectiveStartDateText = cast(@EffectiveStartDate as varchar)
declare @EffectiveEndDateText varchar(30)
set @EffectiveEndDateText = cast(@EffectiveEndDate as varchar)
RAISERROR (
'SPName: InsertUpdateLiquidityDateRule: Start Date: %s cannot be greater than End Date %s',
11,
1,
@EffectiveStartDateText,
@EffectiveEndDateText);
手伝おうとしているだけで、ここに別の例があります。 BEGINTRYの後にこれをBEGINCATCHステートメントに入れました。
注:これは、ifステートメントの使用と非常によく似ています。
BEGIN TRY
--Do something.
END TRY
BEGIN CATCH
--Else on error do this.
PRINT 'Problem found!!! '
-- Whoops, there was an error
-- Raise an error with the details of the exception
DECLARE @ErrMsg nvarchar(4000),
@ErrSeverity int,
@ErrLineNum int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY(),
@ErrLineNum = ERROR_LINE()
RAISERROR(@ErrMsg, @ErrSeverity, 1, @ErrLineNum)
END CATCH