Search code examples
sql-server-2008sqldatatypes

How to verify datatype before entering into the table


I have four columns in a table

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

and the source table with the same columns but have the varchar data type.

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

I have to transfer data from source table to destination table, but while transfering I need to check if the row I have has the correct data type for the destination. If not I need to transfer that complete row to some error table. ex.:

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

if above represnt the source table and only rows 1 and 4 are eligible to tranfer to the destination table other rows will be moved to error table (may be with valid description, if possible)


Solution

  • Something like this

    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')
    

    So to insert into ERRORS table use NOT in WHERE

    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 demo