Sql 如果列数据类型不同,如何将数据从一个表复制到另一个表?
我有两张桌子Sql 如果列数据类型不同,如何将数据从一个表复制到另一个表?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两张桌子 新建[包含数据][所有列均为varchar] NEW2[空表][列具有不同的数据类型] 我想将所有数据从New复制到New2 我所做的是 SELECT T.* INTO #tmp FROM (SELECT * FROM [dbo].[new]) AS T 然后 但它不起作用 Msg 242, Level 16, State 3, Line 2 The conversion of a varchar data type to a smalldat
SELECT T.*
INTO #tmp
FROM (SELECT *
FROM [dbo].[new]) AS T
然后
但它不起作用
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.
[我想要的是将新表的列数据类型,特别是varchar更改为smalldatetime。因此我尝试了这种方法。也欢迎使用任何其他方法。]
任何帮助都将不胜感激
谢谢。在插入时将您的专栏转换为
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
插入时将列强制转换为
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
试试看:
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;
试试看:
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;
对。完成了
我所做的是,
已导入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>>
ALTER TABLE ALTER COL\u NAME
我还将dateforamat更改为dmy,之前是mdy
感谢苏拉吉·辛格和迪普什卡提出的有益建议。是的。完成了
我所做的是,
已导入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>>
ALTER TABLE ALTER COL\u NAME
我还将dateforamat更改为dmy,之前是mdy
感谢苏拉吉·辛格和迪普什卡提出的有益建议。试试这个
SET DATEFORMAT ymd
INSERT INTO destination_table(column_name)
SELECT Column_name As Aliace_name
FROM Source_table
试试这个
SET DATEFORMAT ymd
INSERT INTO destination_table(column_name)
SELECT Column_name As Aliace_name
FROM Source_table
从表
#TMP
中选择数据时,需要使用表new2
的相应数据类型转换数据。。在sql server数据库中,您可以对相同的任务使用convert
函数,但该表有很多列。我的目的是只转换直接不可能的列数据类型。查询太长,无法将CONVERT()应用于每一列。还有什么想法吗。感谢您的快速回复。建议在表中有大量列列表,这就是为什么我们过去在大型数据库中应用规范化概念,以便以适当的方式维护我们的数据。。但对于这个问题,据我所知,您需要编写那个庞大的查询以插入到另一个表中。。因此,您可以更改任一表中的数据类型以使其同步,这将是更好的方法。是的,Pratik,我同意,但我在新表中加载的数据是从Excel文件导入的。因此,避免复杂性,所有列都设置为varchar。问题只在于日期列。我尝试使用CAST([AlarmTime]作为smalldatetime)但它不起作用。从表#TMP
中选择数据时,需要使用表new2
的相应数据类型转换数据。。在sql server数据库中,您可以对相同的任务使用convert
函数,但该表有很多列。我的目的是只转换直接不可能的列数据类型。查询太长,无法将CONVERT()应用于每一列。还有什么想法吗。感谢您的快速回复。建议在表中有大量列列表,这就是为什么我们过去在大型数据库中应用规范化概念,以便以适当的方式维护我们的数据。。但对于这个问题,据我所知,您需要编写那个庞大的查询以插入到另一个表中。。因此,您可以更改任一表中的数据类型以使其同步,这将是更好的方法。是的,Pratik,我同意,但我在新表中加载的数据是从Excel文件导入的。因此,避免复杂性,所有列都设置为varchar。问题只在于日期列。我尝试使用CAST([AlarmTime]作为smalldatetime),但它不起作用。同样的错误不起作用。我试过使用CAST([col_name]AS smalldatetime)@Aditya您的新表需要什么数据类型?还要检查您的列值是否有效,是否可以转换为smalldatetime
嘿,对不起,实际的错误是,[将varchar数据类型转换为smalldatetime数据类型导致值超出范围。]。当我使用sql='select cast(col作为smalldatetime)from#tmp'时,我所做的是,sql='INSERT INTO New2([col])选择cast(col作为smalldatetime)作为col from#tmp'。但引发了相同的错误。即使是我也无法从#tmp中选择sql='select CAST(col as smalldatetime)'错误=将字符串转换为smalldatetime数据类型时转换失败。相同的错误不起作用。我试过使用CAST([col_name]AS smalldatetime)@Aditya您的新表需要什么数据类型?还要检查您的列值是否有效,是否可以转换为smalldatetime
嘿,对不起,实际的错误是,[将varchar数据类型转换为smalldatetime数据类型导致值超出范围。]。当我使用sql='select cast(col作为smalldatetime)from#tmp'时,我所做的是,sql='INSERT INTO New2([col])选择cast(col作为smalldatetime)作为col from#tmp'。但是抛出了同样的错误。即使我也不能从#tmp’error=conv中选择sql='selectcast(colassmalldatetime)