Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在输入表之前验证数据类型_Sql Server 2008_Sqldatatypes - Fatal编程技术网

Sql server 2008 如何在输入表之前验证数据类型

Sql server 2008 如何在输入表之前验证数据类型,sql-server-2008,sqldatatypes,Sql Server 2008,Sqldatatypes,我在一个表中有四列 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 Ad

我在一个表中有四列

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行有资格传输到目标表,则其他行将被移动到错误表中(如果可能,可能具有有效的描述)

类似的内容

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')
插入到目的地
从源中选择*
其中(isnumeric(ID)=1
及
(ID与“[^0-9]%”不同)
及

对('00000000000'+ID,10)我绝对建议您考虑使用SSIS来完成此任务,而不是尝试使用T-SQL。
ISNUMERIC('英镑')
等于
1
,但不能转换为
int
。我想您希望
ID不像“[^0-9]%“
@Damien_The_unsiver:你的建议解决了这个问题。现在我知道了如何实现它。+1我正在实现你的逻辑:)@ZeroToInfine如果这个答案对你有效,请
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')
    )