Integration Services 数据类型

更新日期: 2007 年 9 月 15 日

当数据进入包中的数据流时,提取这些数据的源会将数据转换为 Integration Services 数据类型。 为数值数据分配数值数据类型,为字符串数据分配字符数据类型,为日期分配日期数据类型。 其他数据,如 GUID 和二进制大型对象块 (BLOB),也要分配相应的 Integration Services 数据类型。 如果数据的数据类型无法转换为 Integration Services 数据类型,则会发生错误。

某些数据流组件会在 Integration Services 数据类型和 Microsoft .NET Framework 的托管数据类型之间进行数据类型转换。 有关 Integration Services 和托管数据类型之间的映射的详细信息,请参阅Mapping Data Types in the Data Flow

下表列出了 Integration Services 数据类型。

数据类型 说明

DT_BOOL

布尔值。

DT_BYTES

二进制数据值。 长度可变,且最大长度为 8000 个字节。

DT_CY

货币值。 此数据类型为八字节有符号整数,其小数位数为 4,最大精度为 19。

DT_DATE

由年、月、日和小时组成的日期结构。

DT_DATE 数据类型是使用 8 字节浮点数字来实现的。 日以整数增量表示,从 1899 年 12 月 30 日开始,午夜时间为零点。 小时值以数字的小数部分的绝对值表示。 但是,浮点值无法表示所有实数值;因此,可以在 DT_DATE 中显示的日期的范围受到限制。

另一方面,DT_DBTIMESTAMP 以具有单独的年、月、日、小时、分钟、秒和毫秒字段的结构表示。 此数据类型对能够表示的日期没有范围限制。

DT_DBDATE

由年、月和日组成的日期结构。

DT_DBTIME

由小时、分钟和秒组成的时间结构。

DT_DBTIMESTAMP

由年、月、日、小时、分钟、秒和毫秒组成的时间戳结构。

DT_DECIMAL

精度和小数位数固定的精确数值。 此数据类型为具有单独符号的十二字节无符号整数,其小数位数为 0 到 28,最大精度为 29。

DT_FILETIME

64 位值,表示从 1601 年 1 月 1 日起长度为 100 纳秒的间隔的数量。

DT_GUID

全局唯一标识符 (GUID)。

DT_I1

单字节有符号整数。

DT_I2

双字节有符号整数。

DT_I4

四字节有符号整数。

DT_I8

八字节有符号整数。

DT_NUMERIC

精度和小数位数固定的精确数值。 此数据类型为具有单独符号的十六字节无符号整数,其小数位数为 0 到 38,最大精度为 38。

DT_R4

单精度浮点值。

DT_R8

双精度浮点值。

DT_STR

以空值结束的 ANSI/MBCS 字符串,最大长度为 8000 个字符。 (如果列值包含其他空终止符,则字符串将在第一个空值出现的位置截断。)

DT_UI1

单字节无符号整数。

DT_UI2

双字节无符号整数。

DT_UI4

四字节无符号整数。

DT_UI8

八字节无符号整数。

DT_WSTR

以空值结束的 Unicode 字符串,最大长度为 4000 个字符。 (如果列值包含其他空终止符,则字符串将在第一个空值出现的位置截断。)

DT_IMAGE

二进制值,最大大小为 231-1 (2,147,483,647) 个字节。 .

DT_NTEXT

Unicode 字符串,最大长度为 230-1 (1,073,741,823) 个字符。

DT_TEXT

ANSI/MBCS 字符串,最大长度为 231-1 (2,147,483,647) 个字符。

更改列的数据类型

如果列中的数据不必是源数据类型分配的全角形式,那么最好更改列的数据类型。 使每个数据行尽可能窄有助于优化传输数据时的性能,因为每行越窄,数据从源移动到目标就越快。

Integration Services 包含一组完整的数值数据类型,这样可以使数据类型近似匹配于数据大小。 例如,如果数据类型为 DT_UI8 的列中的值始终为 0 到 3000 之间的整数,则可以将数据类型更改为 DT_UI2。 同样,如果数据类型为 DT_CY 的列改用整数数据类型可以满足包数据要求,则可以将数据类型更改为 DT_I4。

还可以更改具有日期/时间数据的列的数据类型,以便提取数据的日期或时间部分。 例如,如果将列的数据类型从 DT_DBTIMESTAMP 更改为 DT_DBTIME,那么只有值的小时、分钟和秒部分可用。

可以按以下方法更改列的数据类型:

  • 使用转换将列值替换为表达式的结果,或者创建其数据类型不同于原始列的数据类型的列的副本。 有关详细信息,请参阅派生列转换
  • 使用转换将列的数据类型从一种数据类型转换为另一种类型。 有关详细信息,请参阅数据转换
ms141036.note(zh-cn,SQL.90).gif注意:
布尔值是逻辑值而非数字。 虽然布尔值在某些环境中可能显示为数字,但它们并非以数字形式存储,而且不同的编程语言以不同的数值表示布尔值,.NET Framework 方法也是如此。 例如,Visual Basic 中可用的转换函数将 True 转换为 -1;但是 .NET Framework 中的 System.Convert.ToInt32 方法将 True 转换为 +1。Integration Services 表达式语言将 True 转换为 -1。 若要避免错误或意外结果,不应编写依赖 TrueFalse 为特定数值的代码。 如果可能,应将布尔变量的使用限制为与其设计意图对应的逻辑值。

将 Integration Services 数据类型映射为数据库数据类型

下表提供了将特定数据库使用的数据类型映射为 Integration Services 数据类型的原则。 这些映射是从 SQL Server 导入和导出向导在从这些源中导入数据时使用的映射文件中汇总而来的。 有关这些映射文件的详细信息,请参阅使用 SQL Server 导入和导出向导创建包

ms141036.note(zh-cn,SQL.90).gif重要提示:
并不是说这些映射表示它们完全等同,而只是提供指导。 在某些情况下,最好使用不同于此表中所示的数据类型。
数据类型 SQL Server (SQLOLEDB; SQLNCLI) SQL Server (SqlClient) Jet Oracle (MSDAORA) Oracle (OracleClient) DB2 (DB2OLEDB) DB2 (IBMDADB2)

DT_BOOL

bit

bit

Bit

DT_BYTES

binary、varbinary、timestamp

binary、varbinary、timestamp

BigBinary、VarBinary

RAW

RAW

DT_CY

smallmoney、money

smallmoney、money

Currency

DT_DATE

DT_DBDATE

DT_DBTIME

DT_DBTIMESTAMP

datetime、smalldatetime

datetime、smalldatetime

DateTime

TIMESTAMP、DATE、INTERVAL

TIMESTAMP、DATE、INTERVAL

TIME、TIMESTAMP、DATE

TIME、TIMESTAMP、DATE

DT_DECIMAL

DT_FILETIME

DT_GUID

uniqueidentifier

uniqueidentifier

GUID

DT_I1

DT_I2

smallint

smallint

Short

SMALLINT

SMALLINT

DT_I4

int

int

Long

INTEGER

INTEGER

DT_I8

bigint

bigint

BIGINT

BIGINT

DT_NUMERIC

decimal、numeric

decimal、numeric

Decimal

NUMBER、INT

NUMBER、INT

DECIMAL、NUMERIC

DECIMAL、NUMERIC

DT_R4

real

real

Single

REAL

REAL

DT_R8

float

float

Double

FLOAT、REAL

FLOAT、REAL

FLOAT、DOUBLE

FLOAT、DOUBLE

DT_STR

char、varchar

VarChar

CHAR、ROWID、VARCHAR2

CHAR、VARCHAR

CHAR、VARCHAR

DT_UI1

tinyint

tinyint

Byte

DT_UI2

DT_UI4

DT_UI8

DT_WSTR

nchar、nvarchar、sql_variant、xml

char、varchar、nchar、nvarchar、sql_variant、xml

LongText

NVARCHAR2、NCHAR

CHAR、ROWID、VARCHAR2、NVARCHAR2、NCHAR

GRAPHIC、VARGRAPHIC

GRAPHIC、VARGRAPHIC

DT_IMAGE

image

image

LongBinary

LONG RAW、BLOB、LOBLOCATOR、BFILE、VARGRAPHIC、LONG VARGRAPHIC、用户定义

LONG RAW、BLOB、LOBLOCATOR、BFILE、VARGRAPHIC、LONG VARGRAPHIC、用户定义

CHAR () FOR BIT DATA、VARCHAR () FOR BIT DATA

CHAR () FOR BIT DATA、VARCHAR () FOR BIT DATA、BLOB

DT_NTEXT

ntext

text、ntext

NCLOB、NVARCHAR、TEXT

LONG、CLOB、NCLOB、NVARCHAR、TEXT

LONG VARCHAR、NCHAR、NVARCHAR、TEXT

LONG VARCHAR、DBCLOB、NCHAR、NVARCHAR、TEXT

DT_TEXT

text

CLOB、LONG

LONG VARCHAR FOR BIT DATA

LONG VARCHAR FOR BIT DATA、CLOB

有关在数据流中映射数据类型的信息,请参阅Mapping Data Types in the Data Flow

请参阅

概念

使用数据流中的数据

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

更改的内容:
  • 更新了 DT_DBTIMESTAMP 数据类型的说明。

2006 年 7 月 17 日

更改的内容:
  • 说明了将布尔值数据类型转换为整数时可能出现的问题。
  • 说明了包含其他空终止符的 DT_STR 或 DT_WSTR 类型的列值将在第一个空字符处截断的情况。

2005 年 12 月 5 日

更改的内容:
  • 添加了将 Integration Services 数据类型映射到托管数据类型的相关信息和主题链接。
  • 添加了 DT_DATE 和 DT_DBTIMESTAMP 的比较。