将多行插入多个表而不重复" INSERT INTO"

时间:2014-08-12 17:43:40

标签: sql sql-server-2000

我在EXCEL(600多行)中获得了一组数据,我需要将其插入3个不同的表(成员资格,帐户,参与者)。数据看起来像这样:

ID    FirstName    LastName    DOB        Account_Type  Status    Participant_Code    Participant_Type
1     John         Smith       5/5/1960   Gold          Active    002                 A
2     Hello        World       4/9/1975   Platinum      Inactive  002                 A
.
.
.
600

我需要:

INSERT INTO Membership (ID, FirstName, LastName, DOB)
VALUES (1, 'John', 'Smith', '5/5/1960')

INSERT INTO Membership (ID, FirstName, LastName, DOB)
VALUES (2, 'Hello", 'World", '4/9/1975')

INSERT INTO Account(ID, Type, Effective_Date, Status)
VALUES (1, 'Gold', GetDate(), 'Active')

INSERT INTO Account(ID, Type, Effective_Date, Status)
VALUES (2, 'Platinum', GetDate(), 'Inactive')

INSERT INTO Participant(ID, Code, Type)
VALUES (1, 002, 'A')

INSERT INTO Participant(ID, Code, Type)
VALUES (2, 002, 'A')

我不想重复600 * 3 INSERT声明。我有什么选择?

编辑:对不起,忘了提 - 由于工作台的限制,不能选择批量插入。

  
    

更新:     Donal为我提供了一个很好的起点。即使我仍然需要600多个INSERT语句,在Donal的帮助下,至少我不必自己写这个语句。此外,我修改了我的代码以提高其效率:

  

首先,我CREATE and INSERT这600行进入临时表。

CREATE TABLE #temp_table (
ID               INT,
FirstName        VARCHAR(50),
LastName         VARCHAR(50),
DOB              DATE,
Account_Type     VARCHAR(10),
Status           VARCHAR(8),
Participant_Code CHAR(3),
Participant_Type CHAR(1)
)

INSERT INTO #temp_table (1, 'John', 'Smith, '5/5/1960', 'Gold', 'Active', '002', 'A')
.
.
so on

然后,对于特定的表,我可以使用INSERT INTO... SELECT语句

INSERT INTO Membership
SELECT ID, FirstName, LastName, DOB FROM #temp_table

INSERT INTO Account
SELECT ID, Account_Type, Status, GetDate() FROM #temp_table

INSERT INTO Participant
SELECT ID, Participant_Code, participant_type FROM #temp_table

2 个答案:

答案 0 :(得分:2)

在Excel中,您可以动态生成SQL语句。您创建一个在字符串中包含sql并动态连接值的公式。例如 - see here

答案 1 :(得分:1)

你可以做这样的事情

INSERT INTO Membership (ID, FirstName, LastName, DOB)
VALUES (1, 'John', 'Smith', '5/5/1960'),
       (2, 'Hello', 'World', '4/9/1975')

INSERT INTO Account(ID, Type, Effective_Date, Status)
VALUES (1, 'Gold', GetDate(), 'Active'),
       (2, 'Platinum', GetDate(), 'Inactive')

INSERT INTO Participant(ID, Code, Type)
VALUES (1, 002, 'A'),
       (2, 002, 'A')

修改

为避免这么多手动输入,您可以使用以下特定DBMS方法

  1. 对于mysql,您可以将文件导出为.csv文件并使用this method导入

  2. 对于postgresql,您可以导入.csv文件,然后运行

    >>psql mydatabase
    >>COPY mytable FROM '/myfile.csv' USING DELIMITERS ',';
    
  3. 对于microsoft sql server(2000/2005)this知识库文章会很有用。可以找到另一种简单的方法here

  4. 对于oracle数据库this,文章值得一读。