Dev*_*MCT 5 t-sql sql-server ssis sql-server-2005
SQL Server 2005问题:
我正在进行一个数据转换项目,我正在使用80k +行并将它们从一个表移动到另一个表.当我运行TSQL时,它会因为转换类型或其他任何错误而遭受各种错误的轰炸.有没有办法找出导致错误的行?
=====================
我正在执行INSERT INTO TABLE1(...)SELECT ... FROM TABLE2 Table2只是一堆varchar字段,其中TABLE1具有正确的类型.
此脚本将放入sproc并从SSIS包执行.SSIS包首先将5个大型平面文件导入TABLE2.
下面是一个示例错误消息:"将char数据类型转换为datetime数据类型会导致超出范围的datetime值."
有许多日期字段.在TABLE2中,有一些数据值,例如Birthdate的'02/05/1075'.我想检查导致错误的每一行,因此我可以向负责坏数据的部门报告,以便他们可以纠正错误.
这不是用SSIS做的方法.您应该拥有从源到目的地的数据流,以及中间需要的任何转换.通过使用目标的错误输出,您将能够获取错误详细信息,实际上是错误行.
我经常将目的地的错误输出发送到另一个目的地 - 文本文件或设置为允许所有内容的表,包括在真实目的地中无效的数据.
实际上,如果在SSIS中以标准方式执行此操作,则应在设计时检测数据类型不匹配.
我所做的就是使用 WHERE 子句将行集分成两半:
INSERT MyTable(id, datecol) SELECT id, datecol FROM OtherTable WHERE ID BETWEEN 0 AND 40,000
Run Code Online (Sandbox Code Playgroud)
然后不断更改 where 子句之间的值。我已经多次手动完成此操作,但我突然想到,您可以在循环中使用一些 .Net 代码自动进行分割,捕获异常,然后将其范围缩小到仅抛出异常的行,一点一点地。
| 归档时间: |
|
| 查看次数: |
19299 次 |
| 最近记录: |