我有一个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,这就是我想运行脚本的原因。
有什么想法吗?
答案 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)
两个选项:
AND
更改为OR
IN
子句答案 5 :(得分:1)
UPDATE [StoreTestDB].[dbo].[ProductVariant]
SET [IsDefault] = 0,
[Published] = 0
WHERE ProductID in (19, 20, 23....164)