更新具有空日期的所有表

时间:2012-08-09 18:15:30

标签: sql sql-server-2008

我得到了这个选择查询的帮助,我用它来获取两列中包含空值的所有表

select count(*)
from (
   select LastModifiedDate from Table1
      union all
   select LastModifiedDate from Table2
      union all
   select LastModifiedDate from Table3
) a 
where LastModifiedDate is null

要更新所有三个表,有更好的方法吗

Update table1
SET LastModifiedDate = GETDATE()
WHERE LastModifiedDate is null

Update table2
SET LastModifiedDate = GETDATE()
WHERE LastModifiedDate is null

等等? 对不起,我拆分查询的一个查找CreationDate,一个查找LastModifiedDate

2 个答案:

答案 0 :(得分:0)

如果其中任何一列为NULL,您希望更新三个表,将两列设置为当前日期时间。

三个表更新语句可以解决这个问题。它没有比这简单。

答案 1 :(得分:0)

是的,还有更好的方法。正如Gordon Linoff在评论中指出的那样,您可能会使用您提出的查询覆盖有效的创建日期。

请改为尝试:

Update table1
SET CreationDate = ISNULL(CreationDate,GETDATE())
  , LastModifiedDate = GETDATE()
WHERE CreationDate is null or LastModifiedDate is null

Update table2
SET CreationDate = ISNULL(CreationDate,GETDATE())
  , LastModifiedDate = GETDATE()
WHERE CreationDate is null or LastModifiedDate is null

Update table3
SET CreationDate = ISNULL(CreationDate,GETDATE())
  , LastModifiedDate = GETDATE()
WHERE CreationDate is null or LastModifiedDate is null

使用ISNULL将保留现有的CreationDate数据。您不希望将其用于LastModifiedDate,因为您将要修改行,因此该值应该更改。

但是,没有理由尝试重新构建您的陈述,因为它们没有任何问题。