使用单个值更新多个行

时间:2013-09-06 18:35:23

标签: mysql sql tsql sql-update

我的邮寄日期为9/1/2013。我还有50行主键ID,需要使用此单一邮件日期9/1/2013进行更新。

    UPDATE    myTable
    SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
    WHERE     (tblID = 1) OR
              (tblID = 2) OR
              (tblID = 3) OR
              (tblID = 4) OR ETC...

我已经看到了一些关于逐桌的问题,所以我想下一个问题就是。我是否会被迫创建一个带有ID列和MailDate列的tempTable,并使用我想要更新的实际表格将其加入内部?

有没有办法做这个更新,不要求我必须使我的WHERE语句如此庞大或整个创建一个tempTable方式?任何帮助将不胜感激。

编辑: 只是添加这个,所以人们可以更好地理解为什么我选择我做的答案。

我通过用户从访问表单数据表中选择行来获取主键。因此,更新可能会在1行到500行之间进行更新(不过它有点高,但如果确实如此。看起来我很难创建临时表)。因此,我将拥有所有这些ID的vba字符串集合,看起来我需要循环在我的SQL语句中创建我将发送到SQL服务器的IN

3 个答案:

答案 0 :(得分:3)

您可以使用IN 50个值应该没问题。如果您期望数百或数千个值,那么您应该找到一些其他方式,如临时表。

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     tblID IN ( 1, 2,3,...)

如果您从另一个查询的结果中选择ID,您甚至可以用IN

中的子查询替换整个列表

或者如果您的号码是顺序的,您也可以

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     tblID >= 1  AND tblID <= 50

答案 1 :(得分:2)

您可以使用以下内容:

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     tblID IN 
(Select tblID from myTable WHERE <some condition>)

“某些条件”是您如何列出应更改哪个ID。

答案 2 :(得分:1)

如果你要更新整个表,你可以一起忘记where子句......

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)

如果要更新可以查询的某组ID,只需查询ID并使用输入。

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     ID IN (SELECT ID
                 FROM myTable
                 WHERE <condition>)
相关问题