insert into myTable
select distinct
wherefield1,
wherefield2,
anotherfield,
convert(numeric(10,2), varcharfield1),
convert(numeric(10,2), varcharfield2),
convert(numeric(10,2), varcharfield3),
convert(datetime, varcharfield4),
otherfields
from myStagingTable
where insertflag='true'
and wherefield1 = @wherevalue1
and wherefield2 = @wherevalue2
のような一部のレガシーSQL Server 2005のコード内のステートメントを持って選択し、テーブルへの挿入のSQL Server 2005の期待される動作は何ですかvarcharfield1またはvarcharfield2がヌルであるかどうかを判別する変数が設定され、その内の1つがヌルでない限り、インサートは実行するようにプログラムされています。
我々はvarcharfield1は、varcharfield2、またはvarcharfield3は、数値以外の文字列である場合、例外がスローされますと、挿入が発生しないことを知っています。しかし、しばしばそうであるように、これらの変数の1つがnullの場合、私はその動作に困惑しています。実際には、常にこれらの値の1つがnullの場合があります。しかし、挿入が行われるようです。従来のコードでは、ヌルまたは空の値を挿入できるようにしながら、非数値文字データの挿入のみを防止するようになっています(前の手順では、myStagingTableのこれらのフィールドの空の文字列はすべてnull値に置き換えられます)。
これは数年のためのすべてのデフォルト設定でプロダクションSQL Server 2005のインスタンス上で実行されています。新しいバージョンのSQL Serverにアップグレードする場合、この動作は信頼できますか?
おかげで、
Rebeccah
もちろん、正しいです。エラーログエントリのブーカーの原因として、NULLの変換が試みられましたが、数値以外の文字列の変換が試行されたことが原因です。後で私は、コードの作成者が、エラーを引き起こすのを避けるために空の値をヌルに変換し、人間の眼球によるデータの挿入を防止し、レビューを強制するために非数値文字列変換エラーを残したままにしていたことを認識しました。 – Rebeccah