1

我在一个表中有四列

Id Int
Name varchar(2)
Address varchar (4)
Active bit

和具有相同列但具有 varchar 数据类型的源表。

Id varchar(100)
Name varchar(100)
Address varchar (100)
Active varchar(100)

我必须将数据从源表传输到目标表,但是在传输时我需要检查我拥有的行是否具有正确的目标数据类型。如果不是,我需要将该完整行传输到某个错误表。前任。:

ID Name Address Active
1  A     A       1
C  B     B       0
3  AAA   C       1 
4  D     D       0
5  K     K       102

如果上面表示源表并且只有第 1 行和第 4 行有资格转移到目标表,其他行将被移动到错误表(如果可能,可能带有有效的描述)

4

1 回答 1

3

像这样的东西

insert into destination
select * from source 
where (isnumeric(ID)=1 
        and 
        (ID not like '%[^0-9]%')
        and 
        RIGHT('00000000000'+ID,10) <= '2147483647'
      ) 
      and
      len(name)<=2
      and
      len(Address)<=4
      and
      active in ('0','1')

因此,要插入 ERRORS 表,请在 WHERE 中使用 NOT

insert into ERRORS
select * from source 
where 
   NOT
     (
      (isnumeric(ID)=1 
        and 
        (ID not like '%[^0-9]%')
        and 
        RIGHT('00000000000'+ID,10) <= '2147483647'
      ) 
      and
      len(name)<=2
      and
      len(Address)<=4
      and
      active in ('0','1')
    )

SQLFiddle 演示

于 2012-12-27T08:57:39.553 回答