使用TSQL将数据从一个表传输到另一个具有不同字段名称的表

时间:2015-06-05 22:18:21

标签: sql sql-server database tsql

有问题。我有一个名为DATA的数据库。其中有多个表格。一个名为MASTER,其他人称为temp1。

MASTER包含名为first,middle,last,dob,address,city,state,zip,phone,cell的列

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

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

使用类似的东西:

INSERT INTO MASTER SELECT * from temp1

只是爆炸,名字在错误的字段中,由于temp1中的列是混乱的顺序而导致其混乱:

dateofbirth,姓氏,名字,中间名,电话,手机,地址,城市,州,邮编

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

所以firstname为first,lastname为last,cell to cell,address to address,dateofbirth to DOB​​ ...等等,有些列完全跳过..但是你看到它的去向:-)

这可能吗?还是我坚持使用GUI?

3 个答案:

答案 0 :(得分:1)

所有的GUI都为你生成SQL,所以请放心,这是可能的。





这就是你想要的:


& #xA;
  INSERT INTO [MASTER](
第一,中间,最后,dob,地址,城市,州,邮编,电话,手机,...
)&#xA ; SELECT
 firstname,middlename,lastname,dateofbirth,address,city,state,zip,telephone,cell,...
 FROM
 [temp1]
  




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




答案 1 :(得分:1)

您可以使用带有insert语句的select语句,该语句允许您对哪些列进行排序。

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

您可以按任何顺序拥有每个列列表(在insert和select语句中) - 无论表的列结构如何。

答案 2 :(得分:-1)

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

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

我们可以使用适当的列映射为每行数据生成insert语句吗?

例如:

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

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

  • 使用值复制所有插入语句并准备插入主表。