SQL批量导入/插入多个表

时间:2012-08-30 17:14:46

标签: sql batch-file

我有一个情况,我需要将平面文件中的记录导入到几个表中,确保在每个行插入的结果主键上保留选项卡,以便插入到下一个表中。

示例

For each Row in FlatFile_Import 

    RowID = INSERT Row_ELEMENTS1 INTO TABLEA

    PROPID = INSERT ROW_ELEMENTS2 & ROWID INTO TABLEB

    ATTRID = INSERT ROW_ELEMENTS3 & PROPID INTO TABLEC

    . . .  ..
NEXt 

我有一个临时表, StagingTable 填充了excel文件中的数据。 StagingTable 中的每一行数据都包含需要插入各种表(TableA,TableB和TableC)的记录。现在当我从每行插入 TableA 的列时,我需要检索创建/生成的主键, KeyA 接下来我选择从插入列应该进入 TableB 的StagingTable 行以及 KeyA ,然后返回 KeyB ,等等。

我怎样才能最好地处理这个要求?

1 个答案:

答案 0 :(得分:0)

此解决方案假设您可以修改TableA和TableB以添加列。

将数据加载到StagingTable .Staging表应具有StageRecordID(标识)。 然后,您需要修改TableA以添加colum StageRecordID。填充TABLEA时,将StageRecordId存储在此列中。 填充TableB时,使用TableA连接StagingTable以获取TableA的RowID 类似地在TableB中存储StageRecordID以便在填充TABLEC时可以加入它

修改:一些示例代码

--Assuming TableA is 

/*
CREATE TABLE TABLEA
{
RowID INT IDENTITY(1,1)
,Row_ELEMENTS1 varchar(25)
,StageRecordID int  ---you need to add this column to the Table
}
*/
INSERT INTO TABLEA
(
Row_ELEMENTS1,
StageRecordID
)
   SELECT Col1 AS Row_ELEMENTS1,StageRecordID FROM StaginTable


--NOW assuming TABLEB is 

/*
CREATE TABLE TABLEA
{
PROPID  INT IDENTITY(1,1)
,Row_ELEMENTS2 varchar(25)
,ROWID 
,StageRecordID int ---you need to add this column to the Table
}
*/
INSERT INTO TABLEB
(
Row_ELEMENTS2,
ROWID,
StageRecordID
   )
    SELECT a.Col2 AS Row_ELEMENTS2, b.ROWID ,a.StageRecordID FROM StaginTable AS a
    INNER JOIN TABLEA AS b
    ON a.StageRecordID=b.StageRecordID