如何将数据从一个表复制到另一个表,其中列数据类型不同?

时间:2013-12-06 07:39:38

标签: sql sql-server sql-server-2008

我有两张桌子。

  1. NEW [包含数据] [所有列都是varchar]

  2. NEW2 [空表] [列具有不同的数据类型]

  3. 我想将所有数据从New复制到New2。

    我做的是,

    SELECT T.* 
    INTO   #tmp 
    FROM   (SELECT * 
            FROM   [dbo].[new]) AS T 
    

    然后

    INSERT INTO New2(col1, col2....)
    SELECT *
    FROM #TMP
    

    但它不起作用。

    Msg 242, Level 16, State 3, Line 2
    The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value.
    The statement has been terminated.
    

    [我想要的是更改NEW表的列数据类型,尤其是varchar到smalldatetime。所以我试过这种方式。任何其他方法也是受欢迎的。]

    非常感谢任何帮助。

    谢谢。

4 个答案:

答案 0 :(得分:2)

是。完成。

我做的是, 在SQL Server表中导入的Excle数据,表中的所有列都是varchar数据类型。 问题出在excel数据,日期值,某处是NA。所以我不得不用null替换所有那些NA值。

要检查表中的那些无效日期值,我使用了以下命令。

SELECT ISDATE(COL_NAME) AS Result

SELECT ISNULL(COL_NAME) AS Result

为此,有时您还需要检查&使用以下命令设置SQL Server的日期格式

DBCC useroptions
SET DATEFORMAT mdy

然后我将所有结果值替换为NULL

UPDATE TABLE SET COLUMN = NULL WHERE ISDATE(COLUMN) = 0 OR COLUMN = 'NA'

最后,我使用简单的alter命令手动更新了所需的列,

ALTER TABLE ALTER COLUMN COL_NAME <<data type>>

我还将我的dateforamat改为dmy,之前是mdy。

感谢Suraj Singh,Deepshikha提供了有用的建议。

答案 1 :(得分:1)

将您的专栏插入smalldatetime

SET DATEFORMAT ymd 
INSERT INTO New2(col1, col2....)
SELECT Col1,Col2 , CAST('2007-05-08 12:35:29'  AS smalldatetime) As Col_Name,...Col3
FROM #TMP

答案 2 :(得分:1)

尝试:

DECLARE @NEW TABLE([date] VARCHAR(20));

INSERT @NEW SELECT '2/8/2013 15:00' ;

select LEFT([date],2) + SUBSTRING([date],3,2) + SUBSTRING([date],5,4) + ' '+ RIGHT([date],5)+':00'
from @NEW 

UPDATE @NEW SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME, 
                         LEFT([date],2) + SUBSTRING([date],3,2) + SUBSTRING([date],5,4) + ' '+ RIGHT([date],5)+':00', 120));

SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @NEW;

答案 3 :(得分:0)

试试这个

SET DATEFORMAT ymd 
INSERT INTO destination_table(column_name)
SELECT Column_name As Aliace_name
FROM Source_table