Sql 在具有不同数据类型的列上的两个表之间移动数据
我在两个不同的数据库中有两个表。第一个表(Custumers)有许多数据,包含10-12个coulmns。 然后是第二个表(CustumersNew),它有新的列,这些列应该表示与custumer相同的列,只是具有不同的名称和数据类型。CustumersNew当前为空。我想将所有数据从表CUSTOMERS移动到表CUSTOMERSNEW 这里的问题是表Custumers UserID列具有数据类型uniqueidentifier 并且CustumerNew ID列具有数据类型int。因此,与其他coulmn一样,它们在数据类型上也不匹配 如何将数据从A移动到B 编辑:Sql 在具有不同数据类型的列上的两个表之间移动数据,sql,sql-server,sqldatatypes,Sql,Sql Server,Sqldatatypes,我在两个不同的数据库中有两个表。第一个表(Custumers)有许多数据,包含10-12个coulmns。 然后是第二个表(CustumersNew),它有新的列,这些列应该表示与custumer相同的列,只是具有不同的名称和数据类型。CustumersNew当前为空。我想将所有数据从表CUSTOMERS移动到表CUSTOMERSNEW 这里的问题是表Custumers UserID列具有数据类型uniqueidentifier 并且CustumerNew ID列具有数据类型int。因此,与其他
我使用的是MS-SQL我将使用
插入CustumersNew()从Custumers
语句选择
例如
我假设姓名和年龄在这两个表中是不同的类型。您需要编写一个类似的convert语句,其中data type参数应该与CUSTOMERSNEW表中的数据类型匹配
由于UserId/CustomerId是
uniqueidentifier
无法映射为整数,并且我从功能角度怀疑此列中的值的相关性,因此我将在新表中将UserId/CustomerId建模为AUTO
/IDENTITY
列,您不能在int
列中存储uniqueidentifier
,因此您必须想出一组新的键
大多数数据库系统都提供了一种用整数值对记录进行顺序编号的机制。在SQL Server中,他们使用IDENTITY
列,在Oracle中,他们使用序列
,我认为在MySql中,您可以将列指定为自动增量
设置新表(使用自动编号方案)后,只需使用SQL插入数据:
插入到新客户中(COL2、COL3、COL4)
从客户中选择COL2、COL3、COL4
请注意,insert语句不包括ID列—应该自动为您填充ID列。如果您
无法使用insert
并且必须使用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\u id
列形式insert\u widget
表移动到change
表,但change表已经有数据,所以我必须使用update语句那么,您希望如何合并这些数据?对于此uniqueidentifier
customerid,您希望如何从中获取id?基于它生成一个新的还是什么?请添加一些示例数据,并列出字段及其数据类型。这将是有用的。您有在这些数据库上执行外部脚本的选项吗?使用ruby这样的脚本语言可能非常简单。啊!我没有意识到uniqueidentifier
就像一个GUID,并认为它是一个自动标识列。我更新了我的答案,我将如何处理它以及为什么。谢谢你的评论。非常感谢你的回答。我还没有测试你的解决方案,但现在应该可以了!
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)