方法一用BCP命令
bcp 實用工具
bcp 實用工具在 Microsoft? SQL Server? 實例和數據文件之間以用戶指定的格式復數據
語法
bcp {[[database_name][owner]]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[m max_errors] [f format_file] [e err_file]
[F first_row] [L last_row] [b batch_size]
[n] [c] [w] [N] [V ( | | )] []
[q] [C code_page] [t field_term] [r row_term]
[i input_file] [o output_file] [a packet_size]
[S server_name[instance_name]] [U login_id] [P password]
[T] [v] [R] [k] [E] [h "hint [n]"]
參數database_name
指定的表或視圖所在數據庫的名稱如果未指定則為用戶默認數據庫
owner
表或視圖所有者的名稱如果執行大容量復制操作的用戶擁有指定的表或視圖則 owner 是可選的如果沒有指定 owner 並且執行大容量復制操作的用戶不擁有指定的表或視圖則 Microsoft? SQL Server? 將返回錯誤信息並取消大容量復制操作
table_name
是將數據復制到 SQL Server 時 (in) 的目的表名以及從 SQL Server 復制數據時 (out) 的源表名
view_name
是將數據復制到 SQL Server 時 (in) 的目的視圖名以及從 SQL Server 復制數據時 (out) 的源視圖名只有其中所有列都引用同一個表的視圖才能用作目的視圖有關將數據復制到視圖的限制的更多信息請參見 INSERT
Query
是返回一個結果集的 TransactSQL 查詢如果查詢返回多個結果集例如指定 COMPUTE 子句的 SELECT 語句只有第一個結果集將復制到數據文件隨後的結果集被忽略使用雙引號引起查詢語句使用單引號引起查詢語句中嵌入的任何內容在從查詢中大容量復制數據時還必須指定 queryout
in | out | queryout | format
指定大容量復制的方向in 是從文件復制到數據庫表或視圖out 是指從數據庫表或視圖復制到文件只有從查詢中大容量復制數據時才必須指定 queryout根據指定的選項(ncw 或 N)以及表或視圖分隔符format 將創建一個格式文件如果使用 format則還必須指定 f 選項
說明 Microsoft SQL Server 中的 bcp 實用工具不支持大容量復制到包含 sql_variant 或 bigint 數據類型的表
data_file
大容量復制表或視圖到磁盤(或者從磁盤復制)時所用數據文件的完整路徑當將數據大容量復制到 SQL Server 時此數據文件包含將復制到指定表或視圖的數據當從 SQL Server 大容量復制數據時該數據文件包含從表或視圖復制的數據路徑可以有 到 個字符
m max_errors
指定在大容量復制操作取消之前可能產生的錯誤的最大數目bcp 無法復制的每一行都將被忽略並計為一個錯誤如果沒有包括該選項則默認為
f format_file
指定格式文件的完整路徑該格式文件包含以前在同一個表或視圖上使用 bcp 時的存儲響應當使用由 format 選項所創建的格式文件大容量復制入或復制出數據時使用此選項格式文件的創建是可選的在提示幾個格式問題之後bcp 將提示是否在格式文件中保存回答默認文件名為 Bcpfmt大容量復制數據時bcp 可引用一個格式文件因此不必重新交互輸入以前的回答如果未使用此選項也沒有指定 –ncw 或 N則 bcp 將提示輸入格式信息
e err_file
指定錯誤文件的完整路徑此錯誤文件用於存儲 bcp 無法從文件傳輸到數據庫的所有行來自 bcp 的錯誤信息將發送到用戶工作站如果未使用此選項則不創建錯誤文件
F first_row
指定要大容量復制的第一行的序數默認值是 表示在指定數據文件的第一行
L last_row
指定要大容量復制的最後一行的序數默認值是 表示指定數據文件中的最後一行
b batch_size
指定所復制的每批數據中的行數每個批處理作為一個事務復制至服務器SQL Server 提交或回滾(在失敗時)每個批處理的事務默認情況下指定的數據文件中的所有數據都作為一批復制請不要與 h "ROWS_PER_BATCH = bb" 選項一起使用
n
使用數據的本機(數據庫)數據類型執行大容量復制操作此選項不提示輸入每一字段它將使用本機值
c
使用字符數據類型執行大容量復制操作此選項不提示輸入每一字段;它使用 char 作為存儲類型不帶前綴t(制表符)作為字段分隔符n(換行符)作為行終止符
w
使用 Unicode 字符執行大容量復制操作此選項不提示輸入每一字段;它使用 nchar 作為存儲類型不帶前綴t(制表符)作為字段分隔符n(換行符)作為行終止符不能在 SQL Server 版或更早版本中使用
N
對非字符數據使用數據的本機(數據庫)數據類型和對字符數據使用 Unicode 字符類型執行大容量復制操作這是可替代 w 選項的性能更高的選項其目的是使用數據文件將數據從一個 SQL Server 傳輸到另一個 SQL Server 中它不提示輸入每一字段在需要傳輸包含 ANSI 擴展字符的數據以及想利用本機模式的性能時可以使用這一選項不能在 SQL Server 版或更早版本中使用 N 選項
V ( | | )
使用 SQL Server 早期版本中的數據類型執行大容量復制操作此選項與字符 (c) 或本機 (n) 格式一起使用此選項並不提示輸入每一字段它使用默認值例如若要將 SQL Server 中的 bcp 實用工具所支持(但 ODBC 不再支持)的日期格式大容量復制到 SQL Server 可使用 V 參數
重要 將數據從 SQL Server 大容量復制到數據文件時即使指定了 –Vbcp 實用工具也不會為任何 datetime 或 smalldatetime 數據生成 SQL Server 或 SQL Server 的日期格式日期將始終以 ODBC 格式寫入另外由於 SQL Server 版或更早版本不支持可為空的 bit 數據因此 bit 列中的空值寫為值
使用 SQL Server 或 SQL Server 數據類型執行大容量復制操作僅為保持向後兼容性改為使用 –V 選項
q
在 bcp 實用工具和 SQL Server 實例的連接中執行 SET QUOTED_IDENTIFIERS ON 語句使用該選項指定包含空格或引號的數據庫所有者表或視圖的名稱將由三部分組成的整個表名或視圖名引在雙引號 (" ") 中
C code_page
僅為保持向後兼容性作為代替請在格式文件或交互式 bcp 中為每一列指定一個排序規則名
指定數據文件中的數據代碼頁只有當數據中包含字符值大於 或小於 的 charvarchar 或 text 列時code_page 才有用
代碼頁值 描述
ACP ANSI/Microsoft Windows? (ISO )
OEM 客戶程序使用的默認代碼頁如果未指定 C則這是 bcp 使用的默認代碼頁
RAW 不發生從一個代碼頁到另一個代碼頁的轉換因為不發生轉換所以這是最快的選項
<值> 特定的代碼頁號碼例如
t field_term
指定字段終止符默認的字段終止符是 t(制表符)使用此參數替代默認字段終止符
r row_term
指定行終止符默認的行終止符是 n(換行符)使用此參數替代默認行終止符
i input_file
指定響應文件的名稱使用交互模式(未指定 –ncw 或 N)執行大容量復制時響應文件包含對每一字段命令提示問題的響應
o output_file
指定接收 bcp 輸出(從命令提示重定向)的文件的名稱
a packet_size
指定發送到和發送自服務器的每個網絡數據包的字節數可以使用 SQL Server 企業管理器(或 sp_configure 系統存儲過程)設置服務器配置選項但是使用此選項可以單個地替代服務器配置選項packet_size 可以設置為 到 字節默認值為
數據包大小的增加能夠提高大容量復制操作的性能如果要求一個較大的數據包而得不到則使用默認設置bcp 生成的性能統計顯示出所使用數據包的大小
S server_name[instance_name]
指定要連接到的 SQL Server 實例指定 server_name 以連接該服務器上的 SQL Server 默認實例指定 server_nameinstance_name 以連接到該服務器上的 SQL Server 命名實例如果未指定服務器則 bcp 連接到本地計算機上的 SQL Server 默認實例從網絡上的遠程計算機執行 bcp 時要求此選項
U login_id
指定用於連接到 SQL Server 的登錄 ID
P password
指定登錄 ID 的密碼如果未使用此選項則 bcp 將提示輸入密碼如果不帶密碼將此選項用於命令提示行末尾則 bcp 將使用默認密碼 (NULL)
T
指定 bcp 使用網絡用戶的安全憑據通過信任連接連接到 SQL Server不需要 login_id 和 password
v
報告 bcp 實用工具的版本號和版權
R
指定使用為客戶端計算機的區域設置定義的區域格式將貨幣日期和時間數據大容量復制到 SQL Server 中默認情況下將會忽略區域設置
k
指定在大容量復制操作中空列應保留一個空值而不是對插入的列賦予默認值
E
指定標識列的值出現在要導入的文件中如果沒有給出 E則正導入的數據文件中此列的標識值將被忽略而且 SQL Server 會根據創建表期間指定的種子值和增量值自動指派唯一的值如果數據文件的表或視圖中不包含標識列的值則使用格式文件指定導入數據時應跳過表或視圖中的標識列;SQL Server 將自動為該列指派唯一值有關詳細信息請參見 DBCC CHECKIDENT
h "hint [n]"
指定在大容量復制數據到表或視圖時所使用的提示在大容量復制數據到 SQL Server x 或更早版本時不能使用此選項
提示 描述
ORDER (column [ASC | DESC] [n]) 數據文件中數據的排序次序如果要裝載的數據已根據表中的聚集索引排序則會提高大容量復制的性能如果數據文件按不同次序排序或者該表沒有聚集索引則將忽略 ORDER 提示所提供的列名必須是目的表中的有效列默認情況下bcp 假設數據文件沒有排序
ROWS_PER_BATCH = bb 每批中數據的行數(即 bb)在未指定 b 時使用這將使整個數據文件作為單個事務發送到服務器服務器根據值 bb 優化大容量裝載默認情況下ROWS_PER_BATCH 未知
KILOBYTES_PER_BATCH = cc 每批中數據的千字節 (KB) 近似數量(即 cc)默認情況下KILOBYTES_PER_BATCH 未知
TABLOCK 大容量復制操作期間將獲取表級鎖由於只在大容量復制操作期間才控制鎖減少了表中鎖的爭奪因此此提示可以顯著提高性能如果表沒有索引並且指定了 TABLOCK則該表可以同時由多個客戶端裝載默認情況下鎖定行為是由表選項 table lock on bulk load 決定的
CHECK_CONSTRAINTS 大容量復制操作期間將檢查目的表上的所有約束默認情況下將會忽略約束
FIRE_TRIGGERS 與 in 參數一起指定在目的表上定義的任何插入觸發器將在大容量復制操作期間執行如果沒有指定 FIRE_TRIGGERS則不執行插入觸發器對於 outqueryout 和 format 參數將忽略 FIRE_TRIGGERS
注釋
將忽略要導入的數據文件中計算列或 timestamp 列的值SQL Server 自動賦值如果數據文件不包含表中的計算列或 timestamp 列的值可用格式文件指定應在導入數據時跳過表中的計算列和 timestamp 列;SQL Server 將自動為該列賦值
計算列和 timestamp 列照常會從 SQL Server 大容量復制到一個數據文件
SQL Server 標識符(包括數據庫名稱表名或視圖名登錄和密碼)可以包含諸如嵌入空格和引號等字符當在命令提示符處指定包含空格或引號的標識符或文件名時需要將該標識符引在雙引號(" ") 內另外對於包含嵌入空格或引號的所有者表或視圖的名稱可以指定 q 選項或者將所有者表或視圖的名稱在雙引號內用方括號 ([ ]) 括起來
例如Northwind 數據庫內有表 Janes Orders該表由用戶 Jane Doe 所擁有若要使用登錄 Jane Doe 和密碼 go dba 將該表從 Northwind 數據庫大容量復制到 Orderstxt 文件請執行下列命令之一
bcp "NorthwindJane DoeJanes Orders" out "Janes Orderstxt" c q U"Jane Doe" P"go dba"
bcp "Northwind[Jane Doe][Janes Orders]" out "Janes Orderstxt" c U"Jane Doe" P"go dba"
若要指定包含空格或引號的數據庫名稱必須使用 q 選項
有關此實用工具位置和運行方式的信息請參見命令提示實用工具入門
請參見
在不同排序規則間復制數據
使用 bcp 和 BULK INSERT
並行數據裝載
SET QUOTED_IDENTIFIER
sp_tableoption
使用格式文件
方法二DTS 導入/導出向導
DTS 導入/導出向導
在所有的數據轉換服務 (DTS) 工具中DTS 導入/導出向導為在 OLE DB 數據源之間復制數據提供了最簡單的方法
在連接到源和目的之後可以選擇要導入或導出的數據並可對要復制的數據應用各種轉換(例如通過選擇列或使用 Microsoft ActiveX腳本)在大多數情況下可以自動與源數據一起復制主鍵和外鍵約束
說明 可以復制從 SQL 查詢中獲得的數據SQL 查詢可以包含來自同一數據庫或分布式查詢中的多個表的聯接作為整個進程的一部分如果不存在任何表則 DTS 導入/導出向導會自動為您創建目的表
可用的數據源
使用 DTS 導入/導出向導可以連接到下列數據源
大多數的 OLE DB 和 ODBC 數據源以及用戶指定的 OLE DB 數據源
文本文件
到一個或多個 Microsoft SQL Server實例的其它連接
Oracle 和 Informix 數據庫
必須已經安裝 Oracle 或 Informix 客戶端軟件
Microsoft Excel 電子表格
Microsoft Access 和 Microsoft FoxPro數據庫
dBase 或 Paradox 數據庫
有關更多信息請參見 DTS 連接
轉換數據
除復制數據外還可以用諸如 Microsoft Visual Basic? Scripting Edition (VBScript) 或 Microsoft JScript? 之類的 ActiveX 腳本語言轉換列級數據有關更多信息請參見 DTS 轉換轉換數據任務和在 DTS 中使用 ActiveX 腳本
復制數據庫對象
使用 DTS 導入/導出向導可以轉換索引視圖角色存儲過程和引用完整性約束等數據庫對象有關更多信息請參見復制 SQL Server 對象任務
保存 DTS 包
完成 DTS 導入/導出向導之後可以將連接轉換以及調度信息保存為 DTS 包可以下列形式保存包
保存到 SQL Server msdb 數據庫
保存到 SQL Server Meta Data Services
保存存為結構化存儲文件(dts 文件)
保存為 Visual Basic 文件
可以立即運行包或調度該包以供今後執行
有關更多信息請參見保存 DTS 包和調度 DTS 包的執行
編輯包
如果使用 DTS 導入/導出向導創建了一個包然後保存了該包則可以在 DTS 設計器中編輯這個包使用 DTS 設計器可以自定義在 DTS 導入/導出向導中創建的基本包添加步驟任務轉換事件驅動邏輯以及配置工作流有關更多信息請參見 DTS 設計器
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22255.html