SQL Server 2000 å¤é¨æ°æ®å¯¼å ¥æä½æå
å¨SQL Server 2000çå®é 使ç¨åºæ¯ä¸ï¼å°å¤é¨æ°æ®å¯¼å ¥æ°æ®åºæ¯é«é¢éæ±ï¼ä¸åæ ¼å¼çæ°æ®æºå¯¹åºçå¯¼å ¥æ¹å¼åå¨å·®å¼ï¼ä¸é¢åå«ä»ç»å ·ä½çæä½æ¹æ³ã

åç½®åå¤
æ è®ºå¯¼å ¥åªç§æ°æ®æºï¼é½éè¦å 确认以ä¸äºé¡¹ï¼
- ç¡®ä¿SQL Server 2000æå¡æ£å¸¸è¿è¡ï¼ä¸å½åç»å½è´¦å·æ¥æå¯¹åºæ°æ®åºçåå ¥æéã
- æååå»ºå¥½ç®æ æ°æ®è¡¨ï¼å段类åè¦ä¸å¾ å¯¼å ¥çå¤é¨æ°æ®å段类åå¹é ï¼é¿å å¯¼å ¥æ¶åºç°ç±»å转æ¢é误ã
- ç¡®è®¤å¾ å¯¼å ¥çå¤é¨æ°æ®æä»¶è·¯å¾å¯è®¿é®ï¼ä¸æä»¶æªè¢«å ¶ä»ç¨åºå ç¨ã
å¯¼å ¥Excelæ°æ®
SQL Server 2000æ¯æç´æ¥å¯¼å ¥Excelæ ¼å¼çæ°æ®ï¼æä½æ¥éª¤å¦ä¸ï¼
- æå¼ä¼ä¸ç®¡çå¨ï¼å±å¼å¯¹åºçSQL Serverå®ä¾ï¼æ¾å°ç®æ æ°æ®åºèç¹ã
- å³é®ç¹å»ç®æ æ°æ®åºï¼éæ©ãææä»»å¡ã-ãå¯¼å ¥æ°æ®ãï¼æå¼æ°æ®è½¬æ¢æå¡ï¼DTSï¼å¯¼å ¥å导ã
- 卿°æ®æºéæ©é¡µé¢ï¼éæ©ãMicrosoft Excelãï¼ç¹å»ãæµè§ãæé®éæ©å¾ å¯¼å ¥çExcelæä»¶ï¼å¾éãé¦è¡å å«ååç§°ã妿Excel第ä¸è¡æ¯å段åã
- å¨ç®æ 鿩页é¢ï¼éæ©ãç¨äºSQL ServerçMicrosoft OLE DBæä¾ç¨åºãï¼å¡«åæå¡å¨åç§°ã身份éªè¯ä¿¡æ¯ï¼éæ©ç®æ æ°æ®åºã
- éæ©ã仿ºæ°æ®å¤å¶è¡¨åè§å¾ãï¼å¾ééè¦å¯¼å ¥çExcelå·¥ä½è¡¨ï¼ç¹å»ã转æ¢ãå¯ä»¥è°æ´å段æ å°è§åï¼ç¡®è®¤åæ§è¡å¯¼å ¥å³å¯ã
妿éè¦æ¹éå¯¼å ¥å¤ä¸ªExcelæä»¶ï¼ä¹å¯ä»¥ç¼ååå¨è¿ç¨å®ç°èªå¨åå¯¼å ¥ï¼ç¤ºä¾ä»£ç å¦ä¸ï¼
-- åå¨è¿ç¨ï¼æ¹é导å
¥æå®è·¯å¾ä¸çExcelæ°æ®å°ç®æ 表
CREATE PROCEDURE proc_ImportExcelData
@ExcelPath NVARCHAR(255), -- Excelæä»¶å®æ´è·¯å¾
@SheetName NVARCHAR(50), -- è¦å¯¼å
¥çå·¥ä½è¡¨åç§°ï¼æ ¼å¼ä¸º Sheet1$
@TargetTable NVARCHAR(50) -- ç®æ æ°æ®è¡¨åç§°
AS
BEGIN
DECLARE @Sql NVARCHAR(1000)
-- æ¼æ¥OPENROWSETæ¥è¯¢è¯å¥ï¼è¯»åExcelæ°æ®å¹¶æå
¥å°ç®æ 表
SET @Sql = 'INSERT INTO ' + @TargetTable + '
SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',
''Excel 8.0;Database=' + @ExcelPath + ';HDR=YES'',
''' + @SheetName + ''')'
EXEC sp_executesql @Sql
END
GO
-- è°ç¨ç¤ºä¾ï¼å¯¼å
¥Dçtestç®å½ä¸çdata.xlsxçSheet1å·¥ä½è¡¨å°TestTable表
EXEC proc_ImportExcelData
@ExcelPath = 'D:\test\data.xlsx',
@SheetName = 'Sheet1$',
@TargetTable = 'TestTable'å¯¼å ¥CSV/TXTææ¬æ°æ®
对äºCSVãTXTççº¯ææ¬æ ¼å¼çæ°æ®ï¼å¯ä»¥ä½¿ç¨å¤§å®¹éæå ¥ï¼BULK INSERTï¼å½ä»¤å¿«éå¯¼å ¥ï¼æä½æ¹å¼å¦ä¸ï¼
é¦å ç¡®è®¤ææ¬æä»¶çæ ¼å¼ï¼æ¯å¦å段åé符æ¯éå·è¿æ¯å¶è¡¨ç¬¦ï¼ææ¬éå®ç¬¦æ¯å¦ä¸ºåå¼å·ï¼é¦è¡æ¯å¦ä¸ºå段åãä¹åæ§è¡å¯¹åºçBULK INSERTè¯å¥å³å¯ï¼ç¤ºä¾ä»£ç å¦ä¸ï¼
-- 导å
¥CSVæä»¶ç¤ºä¾ï¼å段以éå·åéï¼ææ¬ç¨åå¼å·å
裹ï¼é¦è¡æ¯å段å
BULK INSERT TargetTable -- ç®æ æ°æ®è¡¨åç§°
FROM 'D:\data\user_info.csv' -- CSVæä»¶å®æ´è·¯å¾
WITH (
FORMAT = 'CSV', -- æå®æä»¶æ ¼å¼ä¸ºCSV
FIELDTERMINATOR = ',', -- åæ®µåé符为éå·
ROWTERMINATOR = '\n', -- è¡åé符为æ¢è¡ç¬¦
FIRSTROW = 2, -- ä»ç¬¬äºè¡å¼å§è¯»åï¼è·³è¿é¦è¡å段å
CODEPAGE = '936' -- æå®å符é为GBKï¼é¿å
䏿乱ç
)
-- 导å
¥TXTæä»¶ç¤ºä¾ï¼å段以å¶è¡¨ç¬¦åéï¼æ ææ¬éå®ç¬¦
BULK INSERT TargetTable
FROM 'D:\data\order_info.txt'
WITH (
FIELDTERMINATOR = '\t', -- åæ®µåé符为å¶è¡¨ç¬¦
ROWTERMINATOR = '\n',
FIRSTROW = 1 -- é¦è¡å°±æ¯æ°æ®ï¼ä»ç¬¬ä¸è¡å¼å§è¯»å
)å¦æææ¬æä»¶çç¼ç æ¯UTF-8ï¼éè¦å å°æä»¶è½¬æ¢ä¸ºGBKç¼ç ï¼æè å¨CODEPAGE忰䏿å®å¯¹åºçç¼ç å¼ï¼é¿å å¯¼å ¥ååºç°ä¹±ç ã
å¯¼å ¥Accessæ°æ®åºæ°æ®
å¯¼å ¥Accessæ°æ®åºï¼.mdb/.accdbæ ¼å¼ï¼çæ°æ®ä¸å¯¼å ¥Excel类似ï¼ä¹å¯ä»¥éè¿DTSåå¯¼å®æï¼æ¥éª¤å¦ä¸ï¼
- æå¼DTSå¯¼å ¥åå¯¼ï¼æ°æ®æºéæ©ãMicrosoft Accessãï¼ç¹å»ãæµè§ãéæ©å¾ å¯¼å ¥çAccessæä»¶ã
- ç®æ 鿩坹åºçSQL Serverå®ä¾åæ°æ®åºï¼åç»æ¥éª¤ä¸å¯¼å ¥Excelä¸è´ï¼éæ©éè¦å¯¼å ¥çAccessè¡¨ææ¥è¯¢ï¼è°æ´å段æ å°åæ§è¡å¯¼å ¥ã
ä¹å¯ä»¥éè¿OPENROWSETå½ä»¤ç´æ¥è¯»åAccessæ°æ®ï¼ç¤ºä¾ä»£ç å¦ä¸ï¼
-- ä»Accessæ°æ®åºè¯»åæ°æ®æå
¥å°SQL Serverç®æ 表
INSERT INTO TargetTable
SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',
''D:\data\source.mdb'';''admin'';'''', -- Accessæä»¶è·¯å¾ï¼ç®¡çåè´¦å·ï¼æ å¯ç
''SELECT * FROM AccessTableName'') -- Accessä¸è¦å¯¼å
¥ç表å常è§é®é¢å¤ç
- å¦æå¯¼å ¥æ¶åºç°ãæ æ³åå§å龿¥æå¡å¨ãçé误ï¼éè¦ç¡®è®¤å½åSQL Serverå®ä¾æ¯å¦å¼å¯äºAd Hoc Distributed Queriesåè½ï¼å¯éè¿ä»¥ä¸ä»£ç å¼å¯ï¼
- å¯¼å ¥å䏿æ¾ç¤ºä¹±ç ï¼ä¼å æ£æ¥å¤é¨æä»¶çç¼ç ï¼ä»¥åå¯¼å ¥è¯å¥ä¸æå®çCODEPAGEåæ°æ¯å¦ä¸æä»¶ç¼ç å¹é ã
- å¦æå¯¼å ¥çæ°æ®æéå¤ï¼å¯ä»¥å¨å¯¼å ¥åå æ¸ ç©ºç®æ è¡¨ï¼æè å¨å¯¼å ¥è¯å¥ä¸æ·»å å»éé»è¾ï¼é¿å é夿°æ®å ¥åºã

