【发布时间】:2014-08-12 17:43:39
【问题描述】:
我在 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 声明。我有哪些选择?
编辑:抱歉,忘了提及 - 由于我的工作站的限制,无法选择批量插入。
更新: 多纳尔为我提供了一个很好的起点。尽管我仍然需要 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
【问题讨论】:
-
您熟悉 SSMS 的批量插入向导吗?
-
@xQbert 在这里发布我的问题之前我已经完成了我的研究。你给我看的链接只减少了
VALUES关键字,但我还是需要输入数据600 * 3次 -
它减少了
Insert into tableName (field names) values。数据仍需列出;不然怎么插入... -
@xQbert 刚刚发现您的方法在 SQL Server 2000 中也不起作用...
标签: sql sql-server-2000