2016-09-23 119 views
2

我目前为一家为服务生成器的公司工作,并且最近我们收到了大约6000件新设备的大量列表,看我是否可以编写一个脚本来将数据导入到我们的Web应用程序的数据库中,但对于IT的编码方面,我仍然非常陌生。INSERT INTO SELECT * FROM,同时将数据类型转换为外键

我目前的解决方案是使用INSERT INTO查询将数据拉入生产数据库,但是我的目标是使此脚本尽可能地方便用户,所以即使我碰巧移动到其他地方也可以使用它。

就这样说,我的问题是如何编写一个查询来将“资产类型”字段(即发生器,ATS)转换为与该类型关联的外键(1001,1002),然后插入它进入数据库?这是可能的,还是必须在运行脚本之前将设备转换为fks?

我的确看到了有关改变数据的类似问题,但除非我只是误解了答案,这似乎并不是我正在寻找的。

+1

取决于数据库结构的外观。请提供关于您要插入的表格的更多详细信息,该资产类型表格包含您提供的这些类型和原始数据。 – Jens

+0

目标数据库中的资产类型表非常简单。大多数列是NULL值,唯一的两个重要列是PK(1001,1002,1003,1004)和实际资产类型(发电机,ATS,消防泵等)。我要插入的表格包含来自目标数据库上多个互连表格的数据,例如Customers,Sites和Equipment。我必须导入的数据是客户名称(客户),站点编号,地址,状态(站点),标签号码,设备类型,串行,千瓦尺寸,型号和制造商。类型和制造商是fks。 – sCrabtree

回答

0

使用临时表...

create table Stage1 (AssetId INT identity(1000,1) primary key, AssetInfo varchar(20), OtherFields...); 

insert into Stage1 (AssetInfo, OtherFields) 
select distinct AssetInfo, OtherFields 
from ExistingAssetTable 
; 

然后你就可以使用现在生成的密钥来填充你的另一台

+0

我并不期待如此快速的回答,那真是太棒了。我不能说我完全理解代码的每一部分,但这不是一个需要学习的问题。至于片段本身的功能,它会将数据导入到该表中,并将数据分配给相应的键,然后导入到目标表中? – sCrabtree

+0

这会创建一个临时表(您将数据停放的表格,在使用之前使其适合新格式),然后填充它。确保更改字段名称和数据类型(但不是AssetId字段)。 从这里开始,你可以使用'insert into [existingtable] sselect [Stage1'语句中的[fields] – JohnHC

+0

好吧,我想我明白了。我只是将它导入到表格中,然后自己格式化,对吧?我可以问一下,这样做的好处是什么,而不是在导入前格式化?我知道我在另一个线程中看到有人说这与检查错误等有关。那是对的吗?对不起,问这么多问题。 – sCrabtree

2

我会使用一个临时表的顶部建议作为JohnHC曾建议还可以使用一个SSIS包,他们可以在将来创建一个csv文件,将其放入一个特定的文件夹中,然后每隔15分钟(或任何您选择的)检查该文件的作业将在运行该包时运行该包在该文件夹中找到具有特定名称和格式的任何内容。会使它,所以他们甚至不需要看代码,但只需要填充CSV文件。

+0

这听起来很不错。我需要看看,谢谢。 – sCrabtree

+0

当文件位于文件夹中时运行包/作业: http://www.sqlservercentral.com/articles/Integration+Services+%28SSIS%29/90571/ 使SSIS包可以将数据加载到来自csv文件的表格: http://blog.sqlauthority。COM/2011/05/12/SQL服务器 - 导入 - CSV文件,到数据库表,使用,SSIS / – Zi0n1