共用方式為


從舊版 SQL Server 匯入原生與字元格式資料

若要使用 bcp,從 Microsoft SQL Server 2000 或舊版匯入原生與字元格式資料,請使用 -V 參數。指定 -V 參數時,Microsoft SQL Server 2005 會使用舊版 Microsoft SQL Server 中的資料類型,而資料檔格式將會與舊版中的資料檔格式相同。

ms191212.note(zh-tw,SQL.90).gif附註:
-V 參數會擴充在 Microsoft SQL Server 7.0 中使用的 -6 參數的功能。使用 -6 跟使用 -V60-V65 相同。雖然 SQL Server 仍支援 -6 參數,但是此參數已被取代。因此,建議使用 -V

若要指定資料檔是否屬於舊版的 SQL Server,請使用 -V 參數,如下所示:

SQL Server 版本 限定詞

Microsoft SQL Server 6.0

-V60

Microsoft SQL Server 6.5

-V65

SQL Server 7.0

-V70

SQL Server 2000

-V80

SQL Server 2005 資料類型的解讀

SQL Server 2005 新增了某些新類型的支援。如果您想要將 SQL Server 2005 的新資料類型匯入 SQL Server 2000 或更早的版本,必須以舊版 bcp 用戶端可以讀取的格式儲存該資料類型。下表摘述如何轉換 SQL Server 2005 的新資料類型,以與舊版 SQL Server 相容。

SQL Server 2005 的新資料類型 與 6x 版相容的資料類型 與 70 版相容的資料類型 與 80 版相容的資料類型

bigint

decimal

decimal

*

sql_variant

text

nvarchar(4000)

*

varchar(max)

text

text

text

nvarchar(max)

ntext

ntext

ntext

varbinary(max)

image

image

image

XML

ntext

ntext

ntext

UDT1

image

image

image

* 這是原本就支援的類型。

1 UDT 表示使用者自訂類型。

從 SQL Server 2005 匯出

使用 –V80 參數,從 SQL Server 2005 大量匯出資料時,處於原生模式的 nvarchar(max)varchar(max)varbinary(max)、XML 及 UDT 會以 4 位元組前置詞儲存,如 textimagentext 資料,而不是以 8 位元組前置詞 (這是 SQL Server 2005 的預設值) 儲存。

從 SQL Server 7.0 或更早的版本匯出

從 SQL Server 7.0 或更早的版本大量匯出資料時,請考慮下列情況:

  • 從 SQL Server 7.0、SQL Server 6.5 或 SQL Server 6.0 匯出的 bigint 資料的儲存格式,視資料檔的資料格式而定:
    • 在原生模式或 Unicode 原生格式資料檔中,bigint 資料會儲存為 decimal(19,0)
    • 在字元模式或 Unicode 字元格式資料檔中,bigint 資料會儲存為字元,或儲存為 [-]digits 的 Unicode 字串 (例如,–25688904432)。
  • 若是含 charvarchar 資料行的資料表,在 SQL Server 6.0 或 SQL Server 6.5 中匯出資料時,bcp 會加入 1 位元組前置詞,讓每一個資料檔欄位長度等於資料的長度。在含 numeric 資料的資料表中,資訊會以 SQL Server 原生格式寫入資料檔。
  • 在 SQL Server 7.0 及 SQL Server 2000 中,值 0 代表長度為零的資料行。

從 SQL Server 6.5 或 6.0 匯出

此外,當您從 SQL Server 6.5 或 SQL Server 6.0 大量匯出資料時,也請考慮下列情況:

  • 在 SQL Server 6.5 或更早的版本中,bcp 以長度值 0 代表 Null 值,但 Null 值現在儲存為長度值 -1。
  • bit 資料行中的 Null 值會以值 0 寫入,因為 SQL Server 6.5 及更早的版本不支援可為 Null 的 bit 資料。
  • bcp 公用程式不會為任何 datetimesmalldatetime 資料產生 SQL Server 6.0 或 SQL Server 6.5 日期格式。日期一定會以 ODBC 格式寫入。
  • 使用 -V65 參數會影響效能,因為支援多個日期轉換會產生額外負擔。
  • 在 SQL Server 6.5 或更早的版本中有不同的資料值。如需詳細資訊,請參閱下面一節<複製日期值>。

複製日期值

從 SQL Server 7.0 開始,bcp 會使用 ODBC 大量複製 API。因此,若要將日期值匯入 SQL Server 7.0 或更新版本,bcp 會使用 ODBC 日期格式 (yyyy-mm-dd hh:mm:ss[.f...])。

相反的,在 SQL Server 6.5 或更早的版本中,bcp 會使用 DB-Library 大量複製 API 及 DB-Library 日期格式。若要從 SQL Server 6.5 或更早的版本將日期格式匯出到 SQL Server 7.0 或更新版本,請使用 -V65 參數。如果您指定 -V65,則 bcp 命令會先嘗試使用 ODBC 日期格式,轉換資料檔中的日期值。如果轉換失敗,bcp 就會嘗試使用 DB-Library 格式來轉換日期值。

即使指定了 -V65bcp 命令也一律會為 datetimesmalldatetime 值使用 ODBC 預設格式來匯出字元格式資料檔。例如,包含日期 12 Aug 1998datetime 資料行會以字元字串 1998-08-12 00:00:00.000 大量複製到資料檔。

ms191212.note(zh-tw,SQL.90).gif重要事項:
使用 bcp 將資料匯入 smalldatetime 欄位時,請確定秒數值是 00.000;否則作業將會失敗。smalldatetime 資料類別只會保留最接近分鐘數的數值。BULK INSERT 及 INSERT ...SELECT * FROM OPENROWSET(BULK...) 在這個案例中將不會失敗,但會截斷秒數值。

使用 -V65 參數會影響效能,因為支援多個日期轉換會產生額外負擔。

請參閱

概念

用於匯入或匯出資料的資料格式

其他資源

bcp 公用程式
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
資料類型 (Transact-SQL)
SQL Server 2005 Database Engine 回溯相容性
CAST 和 CONVERT (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助