SQL Server 2005 データベースを使用しています。同じデータ セットに対して、begin...end ブロックで実行されるアクションに応じて、2 つの異なる方法で動作する If ステートメントがあります。
まず、単にコンソールに出力したい場合、次のコードは期待どおり何も出力しません。
if (not exists(select null from tblControls where Name = 'SOME_CONTROL_NAME'))
begin
print 'control not found'
end
このコードは、期待どおりに「コントロールが見つかりました」と出力します。
if (exists(select null from tblControls where Name = 'SOME_CONTROL_NAME'))
begin
print 'control found'
end
ただし、コードを次のように変更すると:
if (not exists(select null from tblControls where Name = 'SOME_CONTROL_NAME'))
begin
insert into tblControls values (632, 'NEW_CONTROL_NAME', 'New Control', 1, 1, NULL, 1, 'DataControls.CheckBox', NULL, NULL, 1)
end
一致するレコードが tblControls に存在する場合でも、insert ステートメントは常に起動します。T-SQL 2005 の挿入ステートメントについて、この動作を引き起こしている可能性のある特別なことがありますか、それとも明らかな何かが欠けていますか? コードのロジックが間違っているかどうかは理解できますが、print ステートメントを使用してテストしたところ、期待どおりに動作しました。
編集:「挿入エラー」メッセージを生成します。
この苛立たしい問題の助けをいただければ幸いです。