2016-10-07 27 views
0

我有一个表,如下所示:T-SQL演员和转换来自源表的问题到目的地

create table dbo.##Table_A00 
(
    RowNo int, 
    TRANSACTION_TYPE varchar(3), 
    ORGANISATION_ID numeric (10), 
    FILE_TYPE varchar(3), 
    CREATION_DATE datetime, 
    CREATION_TIME varchar(3), 
    GENERATION_NUMBER numeric (6) 
) 

不过,我现在用的源文件是用来捕捉平面文件的表,他们可以在任何数据格式。

我在源表的数据是什么类型如下:

CREATE TABLE ##Table_Alltextfiles 
(
    rowID int identity (1,1), 
    [Col1] varchar(50), 
    [Col2] varchar(250), 
    [Col3] varchar(50), 
    [Col4] varchar(50), 
    [Col5] varchar(50), 
    [Col6] varchar(50), 
    [Col7] varchar(50) 
) 

我想要做的就是从##Table_Alltextfiles插入##Table_A00(目标)的所有行(源)

不过我由于数据类型不匹配,我有问题做这个,我试图铸造它没有成功。

我能做些什么来获得varchar的价值,以适应其目的地,即如果它的日期字段或如果它的数字。

这就是我一直在特林做:

insert into dbo.##Table_A00 
    select 
     rowID, 
     col1, cast(col2 as numeric (10)), 
     col3, cast(col4 as date), 
     col5, cast(col6 as numeric (6)) 
    from 
     ##Table_Alltextfiles 
    where 
     col1 = 'A00' 

谢谢

+0

您还应该发布错误信息。 –

回答

1

试试用下面的查询。

insert into dbo.##Table_A00 
    select 
     rowID, 
     SUBSTRING(col1,1,3), case when ISNUMERIC(col2)=1 THEN cast(col2 as numeric (10)) ELSE NULL END, 
     SUBSTRING(col3,1,3), case when ISDATE(col4)=1 THEN cast(col4 as datetime) ELSE NULL END, 
     SUBSTRING(col5,1,3), case when ISNUMERIC(col6)=1 THEN cast(col6 as numeric (6)) ELSE NULL END 
    from 
     ##Table_Alltextfiles 
    where 
     col1 = 'A00' 
+0

谢谢您的回答,但是我没有得到的是案例陈述评估总是等于1(如分别为数字或日期)但是,如果这不起作用: – abs786123

+0

插入dbo。## Table_A00 选择 ROWID, \t \t SUBSTRING(col1,1,3) \t \t铸造(COL2为数字(10)), \t \t SUBSTRING(col3,1,3) \t \t铸造(COL4如datetime), \t \t SUBSTRING(col5,1,3) \t \t cast( COL6为数字(6)) \t \t从 ## Table_Alltextfiles 其中 COL1 = 'A00' – abs786123

+0

只是想知道,你有没有考虑到空?这就是为什么它可以工作 – abs786123