単一の行を更新しようとしている単純な SQL クエリがあります。コードはLinq-to-sqlコードからのものです(Profilerを使用して取得しました)が、ソース(L2S)について心配しないでください...それは質問とは無関係です。
ここで、where 句を使用して更新しようとすると、0 行が更新されます。
次にselect
、同じwhere clause
. 私は単一の結果を返します。よし、データはある。
where clause statements
クエリが最終的に機能するのは、一部をオフにしたときだけです。私はそれを取得しません:(
私は本当にそれを説明することはできません。だから私はこれを示すビデオを作りました。
こちらの YouTube でビデオをご覧ください。
誰でも助けることができますか?それは本当に奇妙です:(
データベースは MS-SQL 2008 です。
- アップデート
実行しようとしているSQL(L2Sからクリーンアップした後)..
update tblBoardPost
set IsSticky = 1
where IdBoardPost = 1278
and IdAddress = 212787
and Subject = N'ttreterte'
and Banner is null
and UniqueSubject = N'ttreterte5'
AND (NOT ([IsAnnouncement] = 1))
AND (NOT ([IsSticky] = 1))
AND (NOT ([IsLocked] = 1))
and IsVisible = 1
and IdUserModified = 1
AND [IdNewsArticle] IS NULL
AND [IdList] IS NULL
(注:はい、NOT(blah = 1))は奇妙ですが、それを作ったのはL2Sです。
更新 2:
ビデオのコードは、トランザクション/ロールバック トランスで実行されています。これは、機能する奇妙なシナリオの1つを実行すると、変更が機能することを意味します..しかし、ロールバックはそれを元に戻します..そのため、2回目に実行すると..元の値がdb行に返されます.
また、ビデオでは、選択クエリは更新クエリとまったく同じではありません..私は非常に多くの順列を(運がなくても)試してきたため..ビデオを作成するまでに..表示するのを忘れていました元のコード。そうは言っても、selectステートメントとupdate / whereステートメントの両方の同じコード(マシンにコピー/貼り付けたとき)は、まったく同じ問題を再現します:(
更新 2 :)
Lieven の要求に従って、コードと結果を示すスクリーンショットを次に示します。