【问题标题】:Moving data between 2 tables on columns with different datatypes在具有不同数据类型的列上的 2 个表之间移动数据
【发布时间】:2012-09-22 05:39:33
【问题描述】:

我在 2 个不同的数据库中有 2 个表。第一个表(客户)有很多数据,10-12 列。 然后我有第二个表 (CustumersNew),它有新的列,应该代表与客户相同的列,只是具有不同的 namesdatatypes。 CustomerNew 当前为空。我想将表 Custumers 中的所有数据移动到表 CustumersNew。

这里的事情是表客户用户 ID 列具有数据类型 uniqueidentifier 并且 CustomerNew ID 列的数据类型为 int。因此,与其他列一样,它们的数据类型完全不匹配。

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

编辑: 我正在使用 MS-SQL

【问题讨论】:

  • 那么,您希望如何合并这些数据?对于这个uniqueidentifiercustomerid,您希望如何从中获取 id?基于它生成一个新的还是什么?您能否为此添加一些示例数据并列出字段及其数据类型,这将很有用
  • 您可以选择在这些数据库上执行外部脚本吗?使用 ruby​​ 之类的脚本语言可能非常简单。

标签: sql sql-server sqldatatypes


【解决方案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 语句。

例如

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/IDENTITY 列新表。

【讨论】:

  • 啊!我没有意识到 uniqueidentifier 就像一个 GUID 并认为它是一个自动标识列。我更新了关于如何处理它以及为什么的答案。感谢您的评论。
  • 非常感谢您的回答,我还没有测试过您的解决方案,但现在应该没问题了!
【解决方案2】:

好吧,你不能将uniqueidentifier 存储在int 列中,所以你必须想出一组新的键。

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

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

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

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

【讨论】:

    【解决方案3】:

    如果你是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表,但是更改表已经有数据,所以我必须使用更新语句

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多