【发布时间】:2010-05-11 13:45:55
【问题描述】:
我有一个动态编写的大查询以集成一些数据。基本上它的作用是查询一些表,连接一些其他表,处理一些数据,然后将其插入到最终表中。
问题是数据太多,我们不能真正相信来源,因为可能存在一些错误或不一致的数据。
例如,在使用客户的数据库进行开发时,我花了将近一个小时寻找错误,因为在我的大查询中间的某个地方,将一些 varchar 转换为 datetime 时出错。事实证明,他们有一些销售日期为“2009-02-29”,这是一个超出范围的日期。 是的,我知道。为什么将其存储为varchar?嗯,源数据库有 3 列日期,“月”、“日”和“年”。我不知道为什么会这样,但仍然如此。
但是,如果来源不可信,我该怎么处理呢?
我无法处理异常,我确实需要将原始消息提升到另一个级别,但我想提供更多信息,以便用户至少可以在致电我们之前尝试解决它。
所以我考虑向用户显示行号,或者至少可以让他知道他必须更正哪些记录的一些 ID。这也是一项艰巨的工作,因为有时集成会运行多达 80000 条记录。 而在 80000 条记录的集成中,一条虚拟错误消息:'将 varchar 数据类型转换为日期时间数据类型导致超出范围的日期时间值'根本没有任何意义。
所以任何想法都会受到赞赏。
哦,我正在使用带有 Service Pack 3 的 SQL Server 2005。
编辑:
好的,对于我所读到的答案,最好的办法是检查可能对引发错误至关重要的每一列,如果它们确实符合条件,我应该自己引发错误,并显示消息 I找到更具描述性的信息,并添加一些可能存储在单独表或一些变量中的信息,例如行的 ID 或其他一些根信息。
【问题讨论】:
标签: sql-server sql-server-2005 tsql integration-testing