0

我有一个查询,将一年前的行从一个表移动到一个相同的“存档”表。

有时,无效日期被输入到dateprocessed列中(用于评估该行是否超过一年),并且查询出错。我想基本上“筛选”坏行——即where not isdate(dateprocessed)不等于 1——以便查询不会尝试归档它们。

我对如何做到这一点有一些想法,但希望以最简单的方式做到这一点。如果我在存储过程中将好的数据选择到临时表中,然后将其与实时表内部连接,然后从实时输出运行删除以存档 - 它将从基础实时表中删除还是从新连接表中删除?

有一个更好的方法吗?谢谢您的帮助。我是一个玩 DBA 的 .NET 程序员,但我真的很想正确地做到这一点。

dateprocessed以下是在某些列值无效时出错的查询:

delete from live 
output deleted.* into archive 
where isdate(dateprocessed) = 1 
  and cast (dateprocessed as datetime) < dateadd(year, -1, getdate()) 
  and not exists (select * from archive where live.id = archive.id)
4

2 回答 2

0

如果您是 .NET 人员,您可以将所有数据记录下来并执行 DateTime.TryParse。更好的是,只需执行一次即可填充真实的 DateTime 列。不解析的日期可以分配固定日期或空值。还有一些日期字符串,.NET 将解析 SQL 不会(例如 2010 年 11 月)。

于 2012-05-08T18:58:49.480 回答
0

最简单的做法是:

  • 在临时表中选择正确的记录
  • 您需要复制到临时表中的字段之一应该是唯一标识符,例如“ID”列
  • 在临时表中做任何额外的处理
  • 从临时表存档到存档表
  • 使用“ID”列从带有临时表连接的实时表中删除。这将确保不犯任何错误。
于 2012-05-08T18:24:18.623 回答