ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

SQL Server Bulk InsertÅúÁ¿Êý¾Ýµ¼Èë
2014-11-24 07:23:06 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:2´Î
Tags£ºSQL Server Bulk Insert ÅúÁ¿ Êý¾Ý µ¼Èë

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¡±

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºCÓïÑÔʵÏÖsqlite3Êý¾Ý¿â²éѯµÄ»ù.. ÏÂһƪ£ºmysql¿ªÆôÓû§(µÇ¼)É󼯹¦ÄÜ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)