ここから本文です

Sqlserverのストアドを実行中にエラーが発生し、 「varcharをnumericに変換中にエ...

wes********さん

2018/9/1711:58:34

Sqlserverのストアドを実行中にエラーが発生し、
「varcharをnumericに変換中にエラーが発生しました」とメッセージ出力され、
対象行を確認したところ、以下の処理についてでした。

UPDATE #tableVar
SET [fldFlg] = 1
WHERE [fldVC] IN
(SELECT
ISNULL(t.[fldD],'')
FROM
[Tbl] t
WHERE
t.[fldA] = CONVERT(int,@vc8)
t.[fldB] = CONVERT(int,@vc6)
t.[fldC] = CONVERT(smallint,@vc4))

なおTbl.fldA,Tbl.fldB,Tbl.fldCはローカル変数をCONVERTした後のデータ型と
同じであることは何度も確認しており、
またローカル変数に入ってくる値の問題かと考え、このUPDATE文の直前に

SELECT CONVERT(int,@vc8),CONVERT(int,@vc6),CONVERT(smallint,@vc4)

の一文を追加し、エラー発生時と同条件で実行してみたところ、
こちらについては問題なく実行され、結果メッセージ欄に表示された後、
矢張り上記UPDATE文にてエラーが発生しました。

ちなみにUPDATE文内の
[#tableVar].[fldFlg]はsmallint型,同[fldVC]はvarchar型、t.[fldD]はchar型となっており、
また[fldVC]のフィールドサイズはt.[fldD]よりも大きいです。

また余談ながら、本処理の記述があるストアドについては、
SqlServer2014環境上にて数か月前に作成完了しており、
その時点においては問題なく動作されるのを繰り返し確認した後、
誰も手を入れずに置いておいたものです。
その間についても、SqlServerのバージョン等変更はございませんでした。

エラーの原因が分かる方、ご教示の程宜しくお願い致します。

閲覧数:
879
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nor********さん

2018/9/1801:42:45

難解ですね。

SELECT
ISNULL(t.[fldD],'')
FROM
[Tbl] t
WHERE
t.[fldA] = CONVERT(int,@vc8)
t.[fldB] = CONVERT(int,@vc6)
t.[fldC] = CONVERT(smallint,@vc4)

を実行するストアド作成して同じ入力パラメータで実行するとどうなりますか?

質問した人からのコメント

2018/9/18 23:42:07

自己解決しました。

ストアドの処理をコメントアウトしながら実行してみると、
エラーメッセージの行番号とは全く異なる場所でエラーが発生しておりました。

内容としては本来は数字文字列が入るべき所に空文字列が入ってしまい、
これをnumericに変換する処理でコケておりました。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる