SQL ServerµÄBulk InsertÓï¾ä¿ÉÒÔ½«±¾µØ»òÔ¶³ÌµÄÊý¾ÝÎļþÅúÁ¿µ¼Èëµ½Êý¾Ý¿âÖУ¬Ëٶȷdz£µÄ¿ì¡£Ô¶³ÌÎļþ±ØÐë¹²Ïí²ÅÐУ¬Îļþ·¾¶ÐëʹÓÃͨÓÃÔ¼¶¨£¨UNC£©Ãû³Æ£¬¼´"\\·þÎñÆ÷Ãû»òIP\¹²ÏíÃû\·¾¶\ÎļþÃû"µÄÐÎʽ¡£
* 1. ÓÉÓÚBulk Insertͨ³£ÅäºÏ¸ñʽ»¯ÎļþÅúÁ¿µ¼ÈëÊý¾Ý¸ü·½±ã£¬ËùÒÔÕâÀïÏȽéÉÜbcp¹¤¾ßµ¼³ö¸ñʽ»¯ÎļþµÄ·½·¨¡£
bcpÊÇSQL ServerÌṩµÄÃüÁîÐÐʵÓù¤¾ßÌṩÁËÊý¾ÝµÄµ¼³ö¡¢µ¼Èë¡¢¸ñʽÎļþµ¼³öµÈ¹¦ÄÜ£¬µ¼³ö¸ñʽ»¯ÎļþµÄÓï·¨ÈçÏ£º
Sql´úÂë
bcp Êý¾Ý¿âÃû.Óû§Ãû.±íÃû format nul -- ÕâÀïµÄnul±ØÐë´æÔÚ£¬ÓÃÓÚ²»Êǵ¼³öºÍµ¼ÈëÊý¾ÝµÄÇé¿öÏÂ
-f Êä³öµÄ¸ñʽ»¯ÎļþÃû [-x] -c -- -x²ÎÊýÖ¸¶¨Êä³öµÄ¸ñʽÎļþΪxml¸ñʽ£¨Ä¬ÈÏ·Çxml¸ñʽ£©; -c²ÎÊýÖ¸¶¨Êý¾Ý´æ´¢·½Ê½Îª×Ö·û£¬²¢Ä¬ÈÏÖ¸¶¨'\t'×÷Ϊ×ֶμä¸ô·û;'\n'×÷ΪÐмä¸ô·û
[-t ×ֶμä¸ô·û] [-r Ðмä¸ô·ûºÅ] -- -tÓë-r²ÎÊý¿ÉÑ¡£¬ÓÃÓÚ¸²¸Ç-cÖ¸¶¨µÄĬÈϼä¸ô·û
-T -- Ö¸¶¨Êý¾Ý¿âÁ¬½Ó¿ÉÐÅ£¬¼´Ê¹ÓÃWindowsÉí·ÝµÇ¼
* 2. Bulk Insert
¸ù¾Ý¸ñʽÎļþµ¼ÈëÊý¾ÝÎļþ£¬Óï·¨¸ñʽÈçÏ£º
Sql´úÂë
Bulk insert Êý¾Ý¿âÃû.Óû§Ãû.±íÃû
from 'Êý¾ÝÎļþ·¾¶'
with
(
formatfile = '¸ñʽÎļþ·¾¶',
FirstRow = 2 --Ö¸¶¨Êý¾ÝÎļþÖпªÊ¼µÄÐÐÊý£¬Ä¬ÈÏÊÇ1
)
* 3. OPENRORWSET(BULK)º¯Êý
ÓÐʱ£¬Ê¹ÓÃOPENROWSET(BULK)º¯Êý¿ÉÒÔ¸üÁé»îµØÑ¡È¡ÏëÒªµÄ×ֶβåÈëµ½Ô±í»òÕ߯äËû±íÖУ¬ÆäÓï·¨¸ñʽΪ£º
Sql´úÂë
INSERT INTO to_table_name SELECT filed_name_list
FROM OPENROWSET(BULK N'path_to_data_file', FORMATFILE=N'path_to_format_file') AS new_table_name
µ±È»£¬¸Ãº¯ÊýÒ²¿ÉÒÔÕâôʹÓãº
Sql´úÂë
SELECT field_name_list INTO temp_table_name
FROM OPENROWSET(BULK N'path_to_data_file', FORMATFILE=N'path_to_format_file') AS new_table_name
ÏÂÃæ¾ÙÒ»¸öÍêÕûµÄÀý×Ó£º
1£©´´½¨Êý¾Ý¿â¡¢±í²¢Ìî³ä²âÊÔÊý¾Ý£¬½Å±¾ÈçÏ£º
Sql´úÂë
-- ´´½¨Êý¾Ý¿â
CREATE DATABASE [db_mgr]
GO
--´´½¨²âÊÔ±í
USE db_mgr
CREATE TABLE dbo.T_Student(
F_ID [int] IDENTITY(1,1) NOT NULL,
F_Code varchar(10) ,
F_Name varchar(100) ,
F_Memo nvarchar(500) ,
F_Memo2 ntext ,
PRIMARY KEY (F_ID)
)
GO
--Ìî³ä²âÊÔÊý¾Ý
Insert Into T_Student(F_Code, F_Name, F_Memo, F_Memo2) select
'code001', 'name001', 'memo001', '±¸×¢001' union all select
'code002', 'name002', 'memo002', '±¸×¢002' union all select
'code003', 'name003', 'memo003', '±¸×¢003' union all select
'code004', 'name004', 'memo004', '±¸×¢004' union all select
'code005', 'name005', 'memo005', '±¸×¢005' union all select
'code006', 'name006', 'memo006', '±¸×¢006'
2£©ÎÒÃÇ¿ÉÒÔʹÓÃSQL ServerµÄmaster..xp_cmdshell´æ´¢¹ý³Ì½«CMDµÄÃüÁî´«¸øÏµÍ³£¬ÕâÑù¾Í¿ÉÒÔÖ±½ÓÔÚSQL ServerµÄ²éѯ´¦ÀíÆ÷ÖÐÖ±½ÓÊäÈëbcpµÄÃüÁ¶ø²»ÓÃÇл»µ½ÃüÁîģʽÏÂÖ´ÐС£SQL Server ³öÓÚ°²È«Ä¿µÄĬÈϽ«¸Ã´æ´¢¹ý³Ì½ûÓÃÁË£¬¿ªÆô·½·¨ÈçÏ£º
Sql´úÂë
--¿ªÆôxp_cmdshell´æ´¢¹ý³Ì£¨¿ªÆôºóÓа²È«Òþ»¼£©
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
3£©Ê¹ÓÃbcpµ¼³ö¸ñʽÎļþ£º
Sql´úÂë
EXEC master..xp_cmdshell 'BCP db_mgr.dbo.T_Student format nul -f C:/student_fmt.xml -x -c -T'
4£©Ê¹ÓÃbcpµ¼³öÊý¾ÝÎļþ£º
Sql´úÂë
EXEC master..xp_cmdshell 'BCP db_mgr.dbo.T_Student out C:/student.data -f C:/student_fmt.xml -T'
truncate table db_mgr.dbo.T_Student -- ½«±íÖÐÊý¾ÝÇå¿Õ
×¢Ò⣺ÔÚʵ¼ÊʹÓùý³ÌÖУ¬Êý¾ÝÎļþ¿ÉÒÔÓɳÌÐòÉú³É£¬ÈçÈÕÖ¾¼Ç¼µÈ£¡
5£©Ê¹ÓÃBulk InsertÓï¾äÅúÁ¿µ¼ÈëÊý¾ÝÎļþ£º
Sql´úÂë
BULK INSERT db_mgr.dbo.T_Student
FROM 'C:/student.data'
WITH
(
FORMATFILE = 'C:/student_fmt.xml'
)
6£©Ê¹ÓÃOPENROWSET(BULK)µÄÀý×Ó£º
Sql´úÂë
INSERT INTO db_mgr.dbo.T_Student(F_Code, F_Name) SELECT F_Code, F_Name
FROM OPENROWSET(BULK N'C:/student_c.data', FORMATFILE=N'C:/student_fmt_c.xml') AS new_table_name -- T_Student±í±ØÐëÒÑ´æÔÚ
SELECT F_Code, F_Name INTO db_mgr.dbo.tt
FROM OPENROWSET(BULK N'C:/student_c.data', FORMATFILE=N'C:/student_fmt_c.xml') AS new_table_name -- tt±í¿ÉÒÔ²»´æÔÚ
×÷Õß¡°rsljdkt¡±