2011-10-27 41 views
0

我有一个SQL Server数据库,我试图在其中一个表上运行更新脚本,但它一直说“0行影响”。更新脚本不工作 - 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,这就是为什么我想运行该脚本。

任何想法?

回答

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, ....) 
+0

感谢你给一个交代,你给我清楚的例子。我已将您的答案标记为我选择的解决方案。非常感谢! – PD24

+0

@ PD24:不客气;) – Marco

1

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

4

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

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

这将单独更新所有行。

1

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

使用IN试试你的说法,即:

WHERE的ProductID IN(19,20,21,22 ETC)

应该有更多的运气!

1

两个选项:

  1. 更改所有ANDOR
  2. 使用IN条款
1
UPDATE [StoreTestDB].[dbo].[ProductVariant] 
SET [IsDefault] = 0, 
    [Published] = 0 
WHERE ProductID in (19, 20, 23....164)