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