准备和导入数据到现有的数据库

我用SQL Server后端维护一个PHP应用程序。 数据库结构大致是这样的:

lot === lot_id (pk, identify) lot_code building ======== buildin_id (pk, identity) lot_id (fk) inspection ========== inspection_id (pk, identify) building_id (fk) date inspector result 

该数据库已经有很多和build筑物,我需要import一些检查。 要点是:

  • 这是一次性的初始负载。
  • 数据来自Excel文件。
  • Excel数据不知道数据库自动生成的ID:检查必须通过lot_code链接到build筑物

我有什么select来做这样的数据加载?

 date inspector result lot_code ========== =========== ======== ======== 31/12/2009 John Smith Pass 987654X 28/02/2010 Bill Jones Fail 123456B 

更新:我是如何做到的

如果其他人需要做类似的任务,这些是数据加载最终需要的步骤:

  1. 准备Excel文件:删除不需要的列,为表格和列标题等指定正确的名称

  2. 使用SQL Server Import / Export Wizard (32位版本; 64位版本缺less此function),将每个工作表加载到(新)数据库表中。 该向导负责(大部分)脏的细节,包括创build适当的DB结构。

  3. 用您最喜爱的客户端login数据库。 为了简化SQL编码,我在新表中创build了一些额外的字段。

  4. 开始交易。

    BEGIN TRANSACTION;

  5. 更新新创build的表中的辅助列:

    UPDATE excel_inspection$ SET building_id = bu.building_id FROM building bu INNER JOIN ....

  6. 在目标表中插入数据:

    INSERT INTO inspection (...) SELECT ... FROM excel_inspection$ WHERE ....

  7. 如果一切正常,请查看结果并提交交易:

    COMMIT;

在我的情况下,SQL Server在使用现有的表连接新表时抱怨sorting冲突。 它是通过在新表中设置适当的sorting规则来解决的,但方法不同:在SQL Server 2005中,我可以简单地从SQL Serverpipe理器(单击,单击,保存和完成)更改sorting规则,但是在SQL Server 2008中必须设置sorting规则手动导入向导(“编辑SQL”button)。

1)将excel文件转换为CSV。

2)将CSV文件导入到保存表中: SQL SERVER – 使用批量插入将CSV文件导入SQL Server – 将逗号分隔文件加载到SQL Server中

3)编写一个存储过程/脚本,在其中声明局部variables并循环遍历保持表中的每一行,在实际表中构build适当的行。 由于这是一次性加载,所以在循环中不会感到羞耻,并且可以完全控制所有的逻辑。

您的数据必须在数据文件中具有自然的主键。 它看起来像lot_code可能是一个,但我没有看到一个build筑物表。

另外,你说检查是通过批号与build筑物相关的,但是表中的关系是build筑和检查之间的关系。

如果数据build模正确,则可以导入临时表,然后使用自然键插入/更新目标表。