数据类型和复制

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

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

下表显示了在 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 Compact 复制将 SQL Server character 数据映射到 SQL Server Compact national character。否则,它会将 character 数据映射到 SQL Server Compact ntext。如果 ntext 数据的长度超过 character 列的长度,那么当数据从 SQL Server Compact 发送到 SQL Server 时同步会失败。

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

national character varyingntext

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

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

ntext

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

Computed Columns

不支持。

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

date

“YYYY-MM-DD”形式的 nchar(10) 值

ms171931.note(zh-cn,SQL.100).gif注意:
SQL Server Compact 存储宽字符。对此类型的转换支持由 SQL Server Compact 3.5 SP1 版本提供。

datetime

Datetime

datetime2

“YYYY-MM-DD hh:mm:ss.nnnnnnn”形式的 nvarchar(27) 值

ms171931.note(zh-cn,SQL.100).gif注意:
SQL Server Compact 存储宽字符。对此类型的转换支持由 SQL Server Compact 3.5 SP1 版本提供。

datetimeoffset

“YYYY-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm”形式的 nvarchar(34) 值

ms171931.note(zh-cn,SQL.100).gif注意:
SQL Server Compact 存储宽字符。对此类型的转换支持由 SQL Server Compact 3.5 SP1 版本提供。

decimal

不支持。请使用 numeric。

double precision

double precision

float

float

geography

image

ms171931.note(zh-cn,SQL.100).gif注意:
对此类型的转换支持由 SQL Server Compact 3.5 SP1 版本提供。

geometry

image

ms171931.note(zh-cn,SQL.100).gif注意:
对此类型的转换支持由 SQL Server Compact 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 发送到 SQL Server Compact 时同步会失败。

ntext

ntext

numeric(同义词:decimaldec

numeric

real

Real

smalldatetime

datetime

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

smallint (int 2)

smallint (int 2)

smallmoney

money

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

sql_variant

ntext

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

text

ntext

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

time

“hh:mm:ss.nnnnnnn”形式的 nvarchar(16) 值

ms171931.note(zh-cn,SQL.100).gif注意:
SQL Server Compact 存储宽字符。对此类型的转换支持由 SQL Server Compact 3.5 SP1 版本提供。

timestamp

不支持。

如果使用发布向导并表明将使用 SQL Server Compact 订阅,则在发布之外对数据类型 timestamp 的任何列进行垂直分区。如果不使用该向导,则必须排除该发布中的此数据类型的列。如果 timestamp/rowversion 列没有垂直分区,则该列中的数据将不会复制。

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(MAX)

image

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

varchar

请参阅“character varying”

XML

ntext

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

本身不支持 datedatetime2datetimeoffsettime 的现有应用程序需要处理映射到兼容数据类型(如 ncharnvarchar)的数据。有关 SQL Server 数据类型的详细信息,请参阅 SQL Server 联机丛书中的数据类型

数据类型限制

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

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

另请参见

概念

数据类型和 RDA

其他资源

托管数据类型映射 (SQL Server Compact)

帮助和信息

获取帮助 (SQL Server Compact 3.5 Service Pack 1)