UPDATE脚本无法正常工作 - 0行受影响

时间:2011-10-27 08:54:26

标签: sql sql-server-2005 tsql sql-server-2008 sql-update

我有一个SQL Server数据库,我试图在其中一个表上运行更新脚本,但它一直说“0行受影响”。

如果我运行以下脚本,则显示“33行受影响”

UPDATE [StoreTestDB].[dbo].[ProductVariant]   
SET [IsDefault] = 0,
    [Published] = 0
WHERE ProductID = 19

但如果我运行以下脚本,则会显示“0行受影响”:

UPDATE [StoreTestDB].[dbo].[ProductVariant]   
SET [IsDefault] = 0,
    [Published] = 0
WHERE ProductID = 19
AND ProductID = 20
AND ProductID = 23
AND ProductID = 24
AND ProductID = 25
AND ProductID = 27
AND ProductID = 28
AND ProductID = 29
AND ProductID = 30
AND ProductID = 31
AND ProductID = 32
AND ProductID = 33
AND ProductID = 54
AND ProductID = 55
AND ProductID = 56
AND ProductID = 57
AND ProductID = 58
AND ProductID = 64
AND ProductID = 71
AND ProductID = 72
AND ProductID = 73
AND ProductID = 74
AND ProductID = 75
AND ProductID = 77
AND ProductID = 105
AND ProductID = 109
AND ProductID = 152
AND ProductID = 157
AND ProductID = 158
AND ProductID = 162
AND ProductID = 164
AND ProductID = 165
AND ProductID = 167
AND ProductID = 169
AND ProductID = 170
AND ProductID = 173
AND ProductID = 174

我在这里做错了什么?

我确定productIDs的IsDefault = 1和Published = 1,这就是我想运行脚本的原因。

有什么想法吗?

6 个答案:

答案 0 :(得分:4)

您的错误是使用AND。
想一想:产品不能同时拥有不同的ID;你想要的是更新不同的产品,每个id一个 所以你必须使用OR:

UPDATE [StoreTestDB].[dbo].[ProductVariant]   
SET [IsDefault] = 0,
    [Published] = 0
WHERE ProductID = 19
OR ProductID = 20
OR ProductID = 23
OR ProductID = 24
...

紧凑语法是:

UPDATE [StoreTestDB].[dbo].[ProductVariant]   
SET [IsDefault] = 0,
    [Published] = 0
WHERE ProductID IN (19, 20, 23, 24, ....)

答案 1 :(得分:4)

你的WHERE子句有问题。您不希望更新productID是所有这些ID的行(因为每行只能有一个ProductID,所以您的WHERE语句永远不会成立),但是逐个。您应该使用IN,如下所示:

UPDATE [StoreTestDB].[dbo].[ProductVariant]   
SET [IsDefault] = 0,
    [Published] = 0
WHERE ProductID IN ( 19, 20, 23 ... etc);

这将分别更新所有行。

答案 2 :(得分:1)

用户或相反。你说ProductID应该是19,20,......同时。

答案 3 :(得分:1)

嗯,我认为问题是你和你所有的id在一起IE产品的id为162或164但不是两者都有。

使用IN尝试语句,即:

产品ID IN(19,20,21,22 ETC)

应该有更多的运气!

答案 4 :(得分:1)

两个选项:

  1. 将所有AND更改为OR
  2. 使用IN子句

答案 5 :(得分:1)

UPDATE [StoreTestDB].[dbo].[ProductVariant]   
SET [IsDefault] = 0,
    [Published] = 0
WHERE ProductID in (19, 20, 23....164)