0

对于邮寄日期,我有一个值为 2013 年 9 月 1 日。我还有 50 行主键 IDS 需要使用 2013 年 9 月 1 日的单个邮件日期进行更新。

    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 字符串集合,看起来我需要循环以IN在我的 SQL 语句中创建我将发送到 SQL 服务器的我。

4

3 回答 3

3

您可以使用INIt should be fine for 50 values。如果您期望数百或数千个值,那么您应该找到其他方法,例如临时表。

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
于 2013-09-06T18:38:09.683 回答
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。

于 2013-09-06T18:39:14.520 回答
1

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

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

如果您要更新一组可以查询的 ID,只需查询这些 id 并使用 in。

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     ID IN (SELECT ID
                 FROM myTable
                 WHERE <condition>)
于 2013-09-06T18:41:09.663 回答