sql-server – SQL 2000’TRY CATCH’错误处理

这是我正在使用的sql 2000数据库.

我有一个我称之为临时表的数据原始数据转储,所以一切都是ntext或nvarchar(255).

我需要将所有这些数据转换/转换为适当的数据类型(即int,decimal,nvarchar等)

我要这样做的方法是使用while循环迭代所有记录,并在每次迭代期间在单个记录上的每一列上尝试CAST,在我访问特定记录后,我将其标记为已处理(位字段).

但是,如果/如果它发生但如何允许while循环继续,我该如何记录错误.

起初我在本地SQL 2005实例中使用TRY CATCH实现了这个(为了让项目继续进行)并且一切运行良好,但我今天才知道开发和开发.国际DBA设置的生产数据库是一个SQL 2000实例,所以我必须遵守.

编辑:我正在使用SSIS包来填充登台表.我看到现在我必须重新访问该包并实现一个脚本组件来处理转换.多谢你们

编辑:我在记录的基础上这样做,而不是批量插入,所以交易的想法似乎是可行的但我不知道如何陷阱@@ ERROR并允许存储过程继续.

编辑:我真的很喜欢Guy’s approach,我将以这种方式实现它.

最佳答案
一般来说,我不喜欢“循环记录”解决方案,因为它们往往很慢,你最终编写了很多自定义代码.

所以…

根据登台表中的记录数量,您可以使用一系列SQL语句对数据进行后处理,这些SQL语句测试列的正确性并标记未通过测试的任何记录.

UPDATE staging_table
SET status_code = 'FAIL_TEST_1'
WHERE status_code IS NULL
AND ISDATE(ntext_column1) = 0;

UPDATE staging_table
SET status_code = 'FAIL_TEST_2'
WHERE status_code IS NULL
AND ISNUMERIC(ntext_column2) = 0;

etc...

最后

INSERT INTO results_table ( mydate, myprice )
SELECT ntext_column1 AS mydate, ntext_column2 AS myprice
FROM staging_table
WHERE status_code IS NULL;

DELETE FROM staging_table
WHERE status_code IS NULL;

并且临时表具有所有错误,您可以导出和报告.

转载注明原文:sql-server – SQL 2000’TRY CATCH’错误处理 - 代码日志