我有一个运行存储过程(SP)的SSIS包。 SP使用Insert INTO。
我在select语句中使用了大量转换,即当转换引发错误并且未插入任何内容时。
1。我希望我的插入功能能够成功完成所有成功转换。
所以我的select语句应该返回所有成功的转换:
选择
进入#tmp
转换(a ..)如果错误跳过行,
转换(b ..)如果错误跳过行
....报告所有跳过的行,如将它们插入到不同的表中
然后我可以简单地做
插入....
从#tmp
答案 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子句的缺点是,如果单个列中包含无效数据,则会删除整行。