在具有不同数据类型的列上的两个表之间移动数据

时间:2012-10-01 11:10:41

标签: sql sql-server sqldatatypes

我在2个不同的数据库中有2个表。第一个表(Custumers)拥有10-12个库存的许多数据。 然后我有第二个表(CustumersNew),它有新列,应该代表与Custumers相同的列,只有不同的名称数据类型。 CustumersNew目前是空的。我想移动来自表Custumers的所有数据到表CustumersNew。

这里的事情是表Custumers UserID列具有数据类型 uniqueidentifier CustumerNew ID列的数据类型为 int 。因此,与其他的coulmns一样,它们在数据类型中不匹配。

如何将数据从A移动到B?

修改 我正在使用MS-SQL

3 个答案:

答案 0 :(得分:1)

我会使用INSERT INTO CustumersNew(<column list>) SELECT <column list from Custumers CONVERTed to data types that match the data type of corresponding columns in CustumersNew> FROM Custumers语句。

E.g。

INSERT INTO CustumersNew(UserId, Name, Age)
SELECT UserId, CONVERT(NVARCHAR(128), Name), CONVERT(INT, Age) 
FROM Custumers

我假设Name和Age在这两个表中的类型不同。您需要编写一个类似的转换语句,其中数据类型参数应与CustumersNew表中的数据类型匹配。

由于UserId / CustomerId为uniqueidentifier无法映射到整数,我从功能角度怀疑此列中值的相关性,我将UserId / CustomerId建模为AUTO / {新表中的{1}}列。

答案 1 :(得分:0)

嗯,您无法在uniqueidentifier列中存储int,因此您必须提供一组新密钥。

大多数数据库系统都提供了一种顺序编号为整数值的记录的机制。在SQL Server中,他们使用IDENTITY列,在Oracle中他们使用sequences,我认为在MySql中您将列指定为auto_increment

设置新表(使用自动编号方案)后,只需使用SQL插入数据:

INSERT INTO CUSTOMERS_NEW (COL2, COL3, COL4) SELECT COL2, COL3, COL4 FROM CUSTOMERS

请注意,insert语句不包含ID列 - 应该为您自动填充。

答案 2 :(得分:0)

如果您是not able to use inserthave to use update,它将是这样

UPDATE change 
SET    widget_id = (SELECT insert_widget.widget_id 
                    FROM   insert_widget 
                    WHERE  change.id = insert_widget.id) 
WHERE  change.id = (SELECT insert_widget.id 
                    FROM   insert_widget 
                    WHERE  change.id = insert_widget.id) 

在此示例中,我想将widget_id列形式的insert_widget表移动到change表,但是更改表已经有数据,因此我必须使用更新语句