1

我有一个简单的 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 的要求,这是显示代码和结果的屏幕截图。

替代文字 http://img196.imageshack.us/img196/7111/lieven.png

4

2 回答 2

0

在视频中,您的选择就像

and not IsAnnouncement = 1

与您的更新中的结果完全不同

and not (IsAnnouncement = 1)

您似乎遇到了运算符优先级问题。

编辑

由于您的视频中的查询不匹配,尽管您说它们匹配,您是否可以复制粘贴以下脚本并让我们知道它们是否给您相同的结果?(我很难相信受影响的行会有所不同)

begin tran

select * 
from tblBoardPost      
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

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

rollback tran
于 2009-09-25T06:31:38.297 回答
0

我检查了您的视频,您应该尝试在更新查询中使用相同的 SQL 条件,即您在选择查询中返回一行。你视频里两条SQL语句的条件不一样,我也不在乎为什么;他们不是苹果对苹果。

只需将工作的 WHERE 子句复制并粘贴到非工作的子句上。

于 2009-09-25T06:35:18.073 回答