我有一个查询将一年之久的行从一个表移动到相同的“存档”表。
有时,无效日期会输入到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)
答案 0 :(得分:0)
最简单的事情是:
答案 1 :(得分:0)
如果您是.NET用户,可以将每个数据都关闭并执行DateTime.TryParse。更好的是,只需执行一次即可填充实际的DateTime列。不解析您的日期可以指定固定日期或null。并且有一些日期字符串,.NET将解析SQL不会(例如,2010年11月)。