我的邮寄日期为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
。
答案 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>)