0

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

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

1.我希望我的插入对于选择中的所有成功转换都成功。

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

SELECT
into #tmp convert(a..) if error skip row,
convert(b..) if error skip row

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

然后我可以简单地做

插入....
select * from #tmp

4

2 回答 2

0

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

例如:

声明 @ExampleTable 表(FirstString varchar(20),SecondString varchar(20))

插入@ExampleTable SELECT '1', '1/2/1990'

插入@ExampleTable SELECT 'A', '1/2/1990'

插入@ExampleTable SELECT '1', 'B'

然后:

插入#tmp

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

将为您提供转换成功的所有行

于 2013-10-03T19:56:38.027 回答
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 在第二个语句中被省略,以表明它是可选的,但为了清晰起见是一个好主意。

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

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

于 2013-10-03T22:36:09.727 回答