我在2个不同的数据库中有2个表。第一个表(Custumers)拥有10-12个库存的许多数据。 然后我有第二个表(CustumersNew),它有新列,应该代表与Custumers相同的列,只有不同的名称和数据类型。 CustumersNew目前是空的。我想移动来自表Custumers的所有数据到表CustumersNew。
这里的事情是表Custumers UserID列具有数据类型 uniqueidentifier CustumerNew ID列的数据类型为 int 。因此,与其他的coulmns一样,它们在数据类型中不匹配。
如何将数据从A移动到B?
修改 我正在使用MS-SQL
答案 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 insert
和have 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
表,但是更改表已经有数据,因此我必须使用更新语句