2011-01-13 11 views
1

私は動的クエリを使用して実行するSQL関数を持っています。パラメータの範囲のいずれかが異なる場合、sql関数がエラーをスローする

ダイナミッククエリは次のとおりです。

exec sp_executesql N'SELECT * 
         FROM Client_Report_Consol_Summary_RELATED1(@p11,@p12,@p13,@p14) 
         WHERE (WEEKNUM = @p4) AND (YEAR = @p5) 
        ORDER BY ProductDescription,ISSUE_DESC,ConsigneeFullName', 
N'@p11 uniqueidentifier, 
@p12 nvarchar(4000), 
@p13 nvarchar(4000), 
@p14 nvarchar(4000), 
@p4 decimal(1,0), 
@p5 decimal(4,0)', 
@p11='F312F49B-203E-4BBA-A74E-82EA356ED6D3', 
@p12=NULL, 
@p13=N'', 
@p14=N'', 
@p4=1,  <-- seems to be the issue 
@p5=2011 

私はデータ型の数値にvarchar型の変換エラー 算術オーバーフローエラーの下に取得する上で、私が実行したとき。

しかし、私はに "はP4の進(2,0) @" それが正常に動作し、 "P4進(1,0) @" 私の動的なクエリと更新を編集するとき。

誰もがなぜこのようなことが起こっているのかを明かすことができます。

おかげ アミット

答えて

1

あなたの関数から出てくるあなたのWEEKNUM列は文字列です.SQLサーバーは数値型に変換しようとしているため、比較を実行できます。したがって、文字列の比較が行われるように(n)varcharとしてparamを渡すか、すでに持っている修正を使用する必要があります。この関数から出てくるWEEKNUM値に対応できるように数値パラメータを大きくします。

私はまず、WEEKNUMをintとして返すダミー関数を作成しましたが、問題を再現できませんでした。以下の機能が問題のデモを行います。

create function Client_Report_Consol_Summary_RELATED1 (
    @p11 uniqueidentifier, 
@p12 nvarchar(4000), 
@p13 nvarchar(4000), 
@p14 nvarchar(4000) 
) 
returns table 
as 
    return (select '22' as WEEKNUM, 2011 as YEAR, 1 as ProductDescription,1 as ISSUE_DESC, 1 as ConsigneeFullName 
    ) 
go 
+0

Damien、それはそれをかなり説明します。大変感謝しています – Amit

1

数値型へのあなたの型変換でデータ損失がある場合に、このエラーが発生します。たとえば、 -

varcharフィールドに値 "123"があり、それをDECIMAL(1,0)に変換しようとしている場合は、完全に123の値を保持できません。したがって、それは上記のエラーをスローします。

+0

サチンを、私はあなたのポイントに同意するが、私は唯一の私は問題ないはずと信じて、私の@ p4の変数に値として「1」を渡しています。アドバイスをお願いいたします – Amit

+0

@Amit - DECIMAL(1,0)で1の値を列に挿入しようとしましたが正常に動作しました。私はなぜそれがあなたの場合に動作していないか分かりません。理想的にはそうすべきです。 @ p4 = CAST( '1'をDECIMAL(1,0))としてみてください。 –

+1

WEEKNUM列の関数から出てくる文字列で、10進数(1,0)に変換できません。 –

関連する問題