資料類型與複寫
並不完全支援所有的 SQL Server 資料類型。做為 SQL Server 發行集的訂閱者, 必須將不支援的型別轉譯到支援的型別。
支援的資料類型與資料類型對應
下表列出在 SQL Server 與 Microsoft SQL Server Compact 3.5 之間複寫時所執行的資料類型對應。此表列出各個 SQL Server 資料類型的對應,並且敘述其限制或特殊行為。
SQL Server 資料類型 | SQL Server Compact 資料類型 |
---|---|
bigint |
Bigint |
binary(n) |
binary(n) |
bit |
Bit |
character(n)(同義字:char(n)) |
national character(n) 或ntext 如果資料的長度在 4000 個字元以下 (含), 複寫就會將 SQL Server character 資料對應到 national character。否則,它會將字元資料對應到 ntext。如果 ntext 資料的長度超過 character 資料行的長度,當資料從 傳送到 SQL Server 的時候,同步處理就會失敗。 |
character varying(n)(同義字:varchar(n)) |
national character varying 或ntext 如果資料的長度在 4000 個字元以下, 複寫就會將 SQL Server character varying 資料對應到 national character varying;否則,它會將可變長度字元資料對應到 ntext。如果 ntext 資料的長度超過 character varying 資料行的長度,當資料從 傳送到 SQL Server 的時候,同步處理就會失敗。 |
character varying(MAX)(同義字: varchar(MAX)) |
ntext 如果 character varying(MAX) 資料的長度超過 ntext 資料行的長度,當資料從 SQL Server 傳送到 的時候,同步處理就會失敗。 |
Computed Columns |
不支援。 如果您使用「發行集精靈」並且指明將會使用 訂閱,就會將屬於 Computed Column 資料類型的任何資料行垂直分割到發行集之外。如果不使用精靈,就必須在發行集排除屬於此資料類型的資料行。 |
date |
'YYYY-MM-DD' 格式的 nchar(10) 值 ![]()
會儲存寬字元。此類型的轉換支援是由 3.5 SP1 版本所提供。
|
datetime |
Datetime |
datetime2 |
'YYYY-MM-DD hh:mm:ss.nnnnnnn' 格式的 nvarchar(27) 值 ![]()
會儲存寬字元。此類型的轉換支援是由 3.5 SP1 版本所提供。
|
datetimeoffset |
'YYYY-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm' 格式的 nvarchar(34) 值 ![]()
會儲存寬字元。此類型的轉換支援是由 3.5 SP1 版本所提供。
|
decimal |
不支援。請使用 numeric。 |
double precision |
double precision |
float |
float |
geography |
image ![]()
此類型的轉換支援是由 3.5 SP1 版本所提供。
|
geometry |
image ![]()
此類型的轉換支援是由 3.5 SP1 版本所提供。
|
image |
image |
integer(同義字:int) |
integer |
money |
money |
national character(n)(同義字:nchar(n)) |
national character(n) |
national character varying(n)(同義字:nvarchar(n)) |
national character varying(n) |
national character varying(MAX)(同義字:nvarchar(MAX)) |
ntext 如果 national character varying(MAX) 資料的長度超過 ntext 資料行的長度,當資料從 SQL Server 傳送到 的時候,同步處理就會失敗。 |
ntext |
ntext |
numeric(同義字:decimal、dec) |
numeric |
real |
Real |
smalldatetime |
datetime 如果 datetime 資料的整數位數超過 smalldatetime 資料行的整數位數,當資料從 傳送到 SQL Server 的時候,同步處理就會失敗。 |
smallint (int 2) |
smallint (int 2) |
smallmoney |
money 如果 money 資料的整數位數超過 smallmoney 資料行的整數位數,當資料從 傳送到 SQL Server 的時候,同步處理就會失敗。 |
sql_variant |
ntext 如果 sql_variant 資料行有二進位資料存在,此二進位資料必須為偶數位元組,否則就會發生轉換錯誤。 |
text |
ntext 如果 text 資料的長度超過 1,073,741,823 個字元,當資料從 SQL Server 傳送到 的時候,同步處理就會失敗。 |
time |
'hh:mm:ss.nnnnnnn' 格式的 nvarchar(16) 值 ![]()
會儲存寬字元。此類型的轉換支援是由 3.5 SP1 版本所提供。
|
timestamp |
不支援。 如果您使用「發行集精靈」並且指明將會使用 訂閱,就會將屬於 timestamp 資料類型的任何資料行垂直分割到發行集之外。如果不使用精靈,就必須在發行集排除屬於此資料類型的資料行。如果 timestamp/rowversion 資料行沒有垂直分割,就不會複寫這個資料行中的資料。 |
tinyint |
tinyint |
uniqueidentifier |
uniqueidentifier |
varbinary(n) |
varbinary(n) |
varbinary(MAX) |
image 如果 varbinary(MAX) 資料的長度超過 image 資料行的長度,當資料從 SQL Server 傳送到 的時候,同步處理就會失敗。 |
varchar |
請參閱可變長度字元 |
XML |
ntext |
請盡可能選擇 SQL Server 與 都支援的資料類型,如此就不必讓複寫執行資料對應。如果無法做到這一點,您的應用程式應該驗證儲存在 資料庫內的值,以確認複寫可以對應 SQL Server 與 之間的這些值。
原本不支援 date、datetime2、datetimeoffset 和 time 的現有應用程式需要處理對應到相容資料類型 (如 nchar 和 nvarchar) 的資料。如需有關 SQL Server 資料類型的詳細資訊,請參閱《SQL Server 線上叢書》中的<資料類型>。
資料類型限制
下列限制適用於 訂閱者︰
- 索引
您無法發行對於 varchar (MAX)、nvarchar(MAX)、varbinary(MAX) 及 XML 資料行具有索引的資料表。建立 訂閱會失敗,因為這些資料行型別會對應到 ntext 或 image,而 ntext 或 image 資料行並不能建立主索引鍵。 - 識別欄位
識別欄位必須有屬於 integer (int 4) 或 bigint (int 8) 的資料類型。 識別欄位不能有屬於 smallint、tinyint、decimal 或 numeric 的資料類型。如果您要訂閱的發行集具有除了 integer (int 4) 或 bigint (int 8) 以外的識別欄位,在 上建立該訂閱就會失敗。
可讓您修改訂閱者端的種子與遞增值,只要使用 ALTER TABLE table_name ALTER COLUMN column_name IDENTITY (seed,increment) 陳述式即可。這可以讓您手動管理識別範圍。然而,如果您的發行集含有識別欄位,而其識別範圍由發行者管理,您就不應該在訂閱者端修改種子或遞增值。如果您指定的種子大於配置的範例識別,當您嘗試在資料表中插入新記錄的時候, 就會傳回錯誤。下次同步處理的時候,發行者會為您的訂閱者指派一個新的識別範圍,因而修正這個問題。 - 不支援的資料類型
當訂閱 SQL Server 2005 發行集時,不支援 computed column、timestamp、date、time、hierarchyid、filestream 和 utcdatetime 資料類型。 - SQL Server 與 中的 CHAR 與 NTEXT 資料類型
SQL Server 允許 CHAR 資料類型大於 的 CHAR 資料類型。若要複寫內容,大的 CHAR 資料類型會轉換到 上的 NTEXT 資料類型。雖然 SQL Server 和 允許變更 CHAR 資料行的資料類型,但兩者都不允許變更 NTEXT 資料行的資料類型。因此,雖然有可能在 SQL Server 端變更大型 CHAR 資料類型,但此變更在 端則會失敗,因為它已經不屬於 CHAR 資料類型。 - NTEXT 或 IMAGE 資料類型
如果某個資料行對應到 ntext,而 SQL Server 將同一個資料行的資料類型變更為 char、nchar 等,則 資料庫上的該資料行會維持 ntext,直到訂閱者重新初始化。
另請參閱
概念
其他資源
Managed 資料類型對應 (SQL Server Compact)