gpt4 book ai didi

sql-server - 找出导致错误的行

转载 作者:行者123 更新时间:2023-12-03 09:43:01 26 4
gpt4 key购买 nike

我有一个动态编写的大查询来集成一些数据。基本上它所做的是查询一些表,连接一些其他表,处理一些数据,然后将其插入到最终表中。

问题是数据太多了,我们不能真正信任来源,因为可能存在一些错误或不一致的数据。

例如,在使用客户的数据库进行开发时,我花了将近一个小时来查找错误,因为在我的大型查询中间某处,将一些 varchar 转换为 datetime 时出错。事实证明,他们有一些销售日期为“2009-02-29”,这是一个超出范围的日期。是的,我知道。为什么将其存储为 varchar?那么,源数据库有 3 个日期列,“月”、“日”和“年”。我不知道为什么会这样,但仍然是这样。

但是,如果来源不可信,我该怎么处理呢?

我无法处理异常,我确实需要将其与原始消息提升到另一个层次,但我想提供更多信息,以便用户至少可以在调用我们之前尝试解决它。​​

所以我考虑向用户显示行号,或者至少可以让他知道他必须更正哪些记录的一些 ID。这也是一项艰巨的工作,因为有时集成将运行多达 80000 条记录。在 80000 条记录集成中,一条虚拟错误消息:“将 varchar 数据类型转换为 datetime 数据类型导致日期时间值超出范围” 毫无意义。

所以任何想法将不胜感激。

哦,我正在使用带有 Service Pack 3 的 SQL Server 2005。


编辑:

好的,对于我读到的答案,最好的办法是检查可能对引发错误至关重要的每一列,如果它们确实符合条件,我应该自己引发错误,并显示消息 I找到更具描述性的内容,并添加一些本可以存储在单独表中的信息或一些变量,例如行的 ID 或其他一些根信息。

最佳答案

对于日期你可以使用isdate函数

select ISDATE('20090229'),ISDATE('20090227')

我通常插入到临时表中,进行检查然后插入到真实表中

关于sql-server - 找出导致错误的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2811191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com