我在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
答案 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方法
对于mysql,您可以将文件导出为.csv文件并使用this method导入
对于postgresql,您可以导入.csv文件,然后运行
>>psql mydatabase
>>COPY mytable FROM '/myfile.csv' USING DELIMITERS ',';
对于microsoft sql server(2000/2005)this知识库文章会很有用。可以找到另一种简单的方法here
对于oracle数据库this,文章值得一读。