数据类型和复制

Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 不完全支持所有的 SQL Server 数据类型。作为 SQL Server 发布的订阅服务器,SQL Server Compact Edition 必须将不支持的类型转换为那些支持的类型。

支持的数据类型和数据类型映射

下表显示了在 SQL Server 和 Microsoft SQL Server Compact Edition 之间进行复制时执行的数据类型映射。该表列出了每个 SQL Server 数据类型的映射,并对限制或特殊行为进行了说明。

SQL Server 数据类型 SQL Server Compact Edition 数据类型

bigint

bigint

binary(n)

binary(n)

bit

bit

character(n)(同义词:char(n))

national character(n) 或 ntext

如果数据的长度为 4000 个字符或更少,则 SQL Server Compact Edition 复制将 SQL Server character 数据映射到 SQL Server Compact Edition national character。否则,它会将 character 数据映射到 SQL Server Compact Edition ntext。如果 ntext 数据的长度超过 character 列的长度,那么当数据从 SQL Server Compact Edition 发送到 SQL Server 时同步会失败。

character varying(n)(同义词:varchar(n))

national character varying 或 ntext

如果数据的长度为 4000 个字符或更少,则 SQL Server Compact Edition 复制将 SQL Server character varying 数据映射到 SQL Server Compact Edition national character varying;否则,它会将 character varying 数据映射到 SQL Server Compact Edition ntext。如果 ntext 数据的长度超过 character varying 列的长度,那么当数据从 SQL Server Compact Edition 发送到 SQL Server 时同步会失败。

character varying(MAX)(同义词: varchar(MAX))

ntext

如果 character varying(MAX) 数据的长度超过 ntext 列的长度,那么当数据从 SQL Server 发送到 SQL Server Compact Edition 时同步会失败。

Computed Columns

不支持。

如果使用发布向导并指示将使用 SQL Server Compact Edition 订阅,则数据类型 Computed Column 的任意列在发布中垂直分区。如果不使用该向导,则必须排除该发布中的此数据类型的列。

datetime

datetime

decimal

不支持。请使用 numeric。

double precision

double precision

float

float

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 发送到 SQL Server Compact Edition 时同步会失败。

ntext

ntext

numeric(同义词:decimal、dec)

numeric

real

real

smalldatetime

datetime

如果 datetime 数据的精度超过 smalldatetime 列的精度,那么当数据从 SQL Server Compact Edition 发送到 SQL Server 时同步会失败。

smallint (int 2)

smallint (int 2)

smallmoney

money

如果 money 数据的精度超过 smallmoney 列的精度,那么当数据从 SQL Server Compact Edition 发送到 SQL Server 时同步会失败。

sql_variant

ntext

如果 sql_variant 列中存在二进制数据,那么二进制数据必须是偶数个字节,否则会发生转换错误。

text

ntext

如果 text 数据的长度超过 1,073,741,823 个字符,那么在数据从 SQL Server 发送到 SQL Server Compact Edition 时同步会失败。

timestamp

不支持。

如果使用发布向导并指示将使用 SQL Server Compact Edition 订阅,则数据类型 timestamp 的任意列在发布中垂直分区。如果不使用该向导,则必须排除该发布中的此数据类型的列。

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(MAX)

image

如果 varbinary(MAX) 数据的长度超过 image 列的长度,那么当数据从 SQL Server 发送到 SQL Server Compact Edition 时同步会失败。

varchar

请参阅“character varying”

XML

ntext

只要可能,请选择 SQL Server 和 SQL Server Compact Edition 都支持的数据类型,这样就不需要执行数据映射的复制。当无法这样做时,您的应用程序应该验证存储在 SQL Server Compact Edition 数据库中的值,以确保复制可以将这些值在 SQL Server 和 SQL Server Compact Edition 之间映射。

有关 SQL Server 数据类型的详细信息,请参阅 SQL Server 联机丛书中的“Data Types”。

数据类型限制

下面的限制适用于 SQL Server Compact Edition 订阅服务器:

  • 索引
    您不能发布其索引位于 varchar (MAX)、nvarchar(MAX)、varbinary(MAX) 和 XML 列的表。创建 SQL Server Compact Edition 订阅将会失败,因为这些列类型映射到了 ntext 或 image,并且无法对 ntext 或 image 列创建主键。
  • 标识列
    SQL Server Compact Edition 标识列必须具有 integer (int 4) 或 bigint (int 8) 数据类型。SQL Server Compact Edition 标识列不能具有 smallint、tinyint、decimal 或 numeric 数据类型。如果订阅一个具有除 integer (int 4) 或 bigint (int 8) 以外的标识列的发布,则将无法在 SQL Server Compact Edition 上创建该订阅。
    使用 SQL Server Compact Edition,您可以通过使用 ALTER TABLE table_name ALTER COLUMN column_name IDENTITY (seed,increment) 语句在订阅服务器上修改种子和增量值。这允许您手动管理标识范围。但是,如果您的发布包括标识列,而该标识范围是由发布服务器管理的,那么您不应该在订阅服务器上修改种子或增量值。如果指定的种子大于所分配的范围标识,则尝试在表中插入新的记录时,SQL Server Compact Edition 将返回一个错误。当下一次同步时,该发布服务器会通过为您的订阅服务器分配一个新的标识范围来改正该问题。
  • 不支持的数据类型
    当订阅 SQL Server 2000 发布时,不支持 computed column 和 timestamp 数据类型。当订阅 SQL Server 2005 发布时,不支持 computed column、timestamp、date、time 和 utcdatetime 数据类型。
  • SQL Server 和 SQL Server Compact Edition 中的 CHAR 和 NTEXT 数据类型
    SQL Server 允许 CHAR 数据类型比 SQL Server Compact Edition 的 CHAR 数据类型大。若要复制内容,请将大 CHAR 数据类型转换为 SQL Server Compact Edition 上的 NTEXT 数据类型。尽管 SQL Server 和 SQL Server Compact Edition 允许更改 CHAR 列的数据类型,但不允许更改 NTEXT 列的数据类型。因此,虽然可以在 SQL Server 端更改大 CHAR 数据类型,但是在 SQL Server Compact Edition 端该更改将会失败,因为它不再是 CHAR 数据类型。
  • NTEXT 或 IMAGE 数据类型
    如果某列映射到 ntext,并且 SQL Server 将同一列的数据类型更改为 char、nchar 等等,则在订阅服务器重新初始化之前,SQL Server Compact Edition 数据库上的列将保持为 ntext。

请参阅

概念

数据类型和 RDA

其他资源

数据类型映射 (SQL Server Compact Edition)

帮助和信息

获取 SQL Server Compact Edition 帮助