0

名前付きパラメータを持つストアドプロシージャを呼び出しています。名前付きパラメータと計算によるストアドプロシージャ

exec MySP @name = 'binesh', @amount = @amt, @date = @date 

私にとってはうまくいきます。

しかし、私は

exec MySP2 @name = 'binesh', @amount = [email protected], @date = @date 

または

exec MySP3 @name = 'binesh', @amount = @amt, @date = convert(varchar(25), @date, 131) 

をしようとしているとき、私は、構文エラーが発生します。

私は、それぞれのために別々の変数を作成する必要がありますか(常識はそれが道ではないことを伝えます)。では、これの構文は何ですか?

おかげで、すべての

Binesh

+0

あなたが取得しているとどのように変数は各SPで宣言されている構文エラーとは何ですか? – Sam

+0

-1000でエラーが発生した場合は、入力以外の理由でクエリが負の数値を処理しない可能性があります。 – ZLK

+0

私はこのようなクエリウィンドウを呼び出しています。それは-1000ではない。その - @ amt。ごめんなさい。質問の更新 –

答えて

2

私はので、あなたがこれを行うことはできませんプロシージャのデータ型を考えます。私は、@ amountがintで、@date varchar(25)が手続きパラメータであると思います。 @dateがvarcharの場合、@ date = convert(varchar(25)、@ date、131)を直接入れることはできません。 convert.My提案に同じ型の変数を使用しますが、ストアドプロシージャのために「インライン」の入力を構築することはできません

declare @amt INT= 100; --some value 
set @amt = @amt * -1; 
declare @date DATE = getdate(); -- some date 
declare @date2 VARCHAR(25); 
set @date2 = convert(varchar(25),@date,131); --convert to varchar 
exec MySP3 @name='binesh', @amount = @amt,@[email protected] 
+0

spの日付は、varcharのタイプのみです。&-amtはこれまでどおり何かを取るべきでしょうか? –

+0

はい、このようなローカル変数を使って調整できます@amt INT = 100; セット[@amt] = [@amt] * -1 –

1

です。入力を使用する前に解決する必要があります。

たとえば、あなたがこのような何かを(だけでなく、他のパラメータを解決)する必要があります...

declare 
    @date varchar(25) = convert(varchar(25), @date, 131); 

exec MySP3 @name = 'binesh', @amount = @amt, @date = @date; 
関連する問題