跳过错误行并报告在选择转换中创建行的所有错误

时间:2013-10-03 18:54:13

标签: sql sql-server-2008 ssis

我有一个运行存储过程(SP)的SSIS包。 SP使用Insert INTO。

我在select语句中使用了大量转换,即当转换引发错误并且未插入任何内容时。

1。我希望我的插入功能能够成功完成所有成功转换。

所以我的select语句应该返回所有成功的转换:

选择
进入#tmp 转换(a ..)如果错误跳过行,
转换(b ..)如果错误跳过行

....报告所有跳过的行,如将它们插入到不同的表中

然后我可以简单地做

插入....
从#tmp

中选择*

2 个答案:

答案 0 :(得分:0)

您可以先检查类型,看看它们是否有效。假设您要将字符串转换为整数,将第二个字符串转换为日期。

例如:

DECLARE @ExampleTable TABLE(FirstString varchar(20),SecondString varchar(20))

INSERT INTO @ExampleTable SELECT'1','1/2/1990'

INSERT INTO @ExampleTable SELECT'A','1/2/1990'

INSERT INTO @ExampleTable SELECT'1','B'

THEN:

插入#tmp

SELECT * FROM @ExampleTable WHERE ISNUMERIC(FirstString)= 1 AND ISDATE(SecondString)= 1

会为您提供转化成功的所有行

答案 1 :(得分:0)

select中的case语句可能对你有用。

如果你有

Select
   CASE
     WHEN ISNUMERIC(Column1) = 1 THEN Column1
     ELSE NULL
   END,
   CASE
     WHEN ISDATE(Column2) = 1 THEN Column2
   END
FROM Table1

ELSE不在第二个陈述中,表明它是可选的,但清晰明了。

如果案例评估为true,则插入该列的行。如果它的计算结果为false,则返回NULL并且不插入任何内容,并且不会出现错误。

使用where子句的缺点是,如果单个列中包含无效数据,则会删除整行。