我有一个简单的 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:
视频中的代码正在事务/回滚事务中运行。这意味着如果我确实运行了其中一个有效的奇怪场景,则更改有效..但是回滚会撤消它..所以当我第二次运行它时..原始值已返回到数据库行。
此外,在 vid 中,选择查询与更新查询不完全相同 .. 因为我一直在尝试很多排列(没有运气) .. 所以当我制作 vid 时 .. 我忘了显示原始代码。也就是说,select 语句和 update/where 语句中的相同代码(当我在我的机器上复制/粘贴时)重现了完全相同的问题 :(
更新 2 :)
根据 Lieven 的要求,这是显示代码和结果的屏幕截图。