【问题标题】:Using TSQL to transfer data from one table to another that have different field names使用 TSQL 将数据从一个表传输到另一个具有不同字段名称的表
【发布时间】:2015-06-06 07:03:38
【问题描述】:

有问题。我有一个名为 DATA 的数据库。其中有多个表。一个叫 MASTER,另一个叫 temp1。

MASTER 有名为 first、middle、last、dob、address、city、state、zip、phone、cell 的列

Temp1 具有或多或少基本相同的列,但顺序不同,列名不同,列多于 MASTER 中的列等等......

我希望能够编写一个 TSQL 脚本,我可以执行该脚本将数据从 temp1 移动到 MASTER,但映射哪一列获取什么数据。

使用类似的东西:

插入母版 从 temp1 中选择 *

只是爆炸,名称在错误的字段中,并且由于 temp1 中的列是混乱的,因此一团糟:

出生日期、姓氏、名字、中间名、电话、手机、地址、城市、州、邮编

我想做的是能够在列传输时映射它们...就像我使用导入 GUI 一样。

所以名字到第一,姓到最后,单元格到单元格,地址到地址,出生日期到出生日期......等等,有些列完全跳过了......但你知道它的去向:-)

这可能吗?还是我在使用 GUI 时卡住了??

【问题讨论】:

  • 这里是一个开始:如果你只是写名字和姓氏,它会这样写:INSERT INTO MASTER (firstname, lastname) SELECT first, last FROM temp1。诀窍是显式命名 master 中的每一列,并显式命名 temp1 中的每个对应列。
  • 这是您自己的问题的重复。您已经对此问题有一个公认的答案。 -1

标签: sql sql-server database tsql


【解决方案1】:

GUI 所做的只是为您生成 SQL,所以请放心,这是可能的。

这就是你想要的:

INSERT INTO [MASTER] (
     first, middle, last, dob, address, city, state, zip, phone, cell, ...
)
SELECT
    firstname, middlename, lastname, dateofbirth, address, city, state, zip, telephone, cell,  ...
FROM
    [temp1]

SQL Server 将使用命名列的索引来映射数据,而不考虑名称和类型。如果存在类型不匹配,它将尝试执行隐式转换或因运行时错误而失败。

【讨论】:

  • 但是如果两个字段的顺序不同并且名称不同,它怎么知道将数据放在哪里呢?你能用我偶然提供的字段名写一个例子吗?
  • @sal 它使用 INSERT 和 SELECT 语句中指定的字段顺序,而不是在表定义中。
  • 但两张表中没有一张的顺序相同。例如,master 中的第一个字段是最后一个字段,而另一个表中的第一个字段是单元格编号。所有现场 irder 都不同步,有些甚至在需要 nkt 时被跳过。
  • @sal 表名和顺序哪部分没关系不清楚?它使用 INSERT 和 SELECT 的顺序。 INSERT 和 SELECT 必须同步。
【解决方案2】:

您可以将 select 语句与 insert 语句一起使用,该语句允许您对列的位置进行排序。

INSERT INTO [MASTER] (FIRSTNAME,LASTNAME)
SELECT FIRST,LAST FROM TEMP1

您可以按任何顺序排列每个列列表(在插入和选择语句中) - 无论表的列结构如何。

【讨论】:

    【解决方案3】:

    在我看来,我们需要以编程方式或手动映射列以准确插入数据。

    我有一个简单的选择,不确定它是否是最佳实践:

    我们可以为每一行数据生成插入语句吗?

    例如:

    • 将 TEMP1 表中的所有行导出到 Excel 中
    • 使用 CONCATENATE 为 Excel 上 Row1 的所有值编写插入语句。

      =CONCATENATE("INSERT INTO MASTER(Lname,Fname,Address)  Values('",A1,"','",B1,"','",C1,"')
      
    • 使用拖动选项为所有行生成插入语句。

    • 复制所有带有值的插入语句并准备插入到主表中。

    【讨论】:

      猜你喜欢
      • 2014-02-20
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多