int、bigint、smallint 和 tinyint
使用整数数据的精确数字数据类型。
| 数据类型 | 范围 | 存储 |
| tinyint | 0 到 255。 | 1 字节 |
| smallint |
-2^15 (-32,768) 到 2^15-1 (32,767)。 |
2 字节 |
| int | -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)。 | 4 字节 |
| bigint | -2^63 (-9,223,372,036,854,775,808) 到 2^63-1。 (9,223,372,036,854,775,807) | 8 字节 |
decimal [ (p[ ,s] )] 和 numeric[ (p[ ,s] )]
ecimal 和 numeric 是同义词,可互换使用。
decimal。
p(精度)
默认精度为 18。
s (小数位数)
最大存储大小基于精度而变化。
|
精度(p) |
存储字节数 |
|---|---|
|
1 - 9 |
5 |
|
10-19 |
9 |
|
20-28 |
13 |
|
29-38 |
17 |
money 和 smallmoney
money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一。
|
数据类型 |
范围 |
存储 |
|---|---|---|
|
money |
-922,337,203,685,477.5808 到 922,337,203,685,477.5807。 |
8 字节 |
|
smallmoney |
-214,748.3648 到 214,748.3647。 |
4 字节 |
bit
可以取值为 1、0 或 NULL 的 integer 数据类型。
bit,则这些列作为 2 个字节存储,以此类推。
bit 值:TRUE 将转换为 1,FALSE 将转换为 0。
转换为 bit 会将任何非零值升为 1。
float 和 real
real 的 ISO 同义词为 float(24)。
n 的默认值为 53。
|
n值 |
精度 |
存储大小 |
|---|---|---|
|
1-24 |
7 位数 |
4 字节 |
|
25-53 |
15 位数 |
8 字节 |
|
数据类型 |
范围 |
存储 |
|---|---|---|
|
float |
-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308 |
n 的值 |
|
real |
-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38 |
4 字节 |
日期时间
| 类型 | 默认的字符串文字格式 | 日期范围 | 时间范围 | 时区偏移量范围 | 各元素的范围 | 字符长度 | 存储大小 | 精确度 | 默认值 | 日历 | 用户定义的秒的小数部分精度 | 时区偏移量感知和保留 | 夏时制感知 |
| date | YYYY-MM-DD | 0001-01-01 到 9999-12-31(对于 Informatica,为 1582-10-15 到 9999-12-31) 公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日(对于 Informatica,为公元 1582 年 10 月 15 日到公元 9999 年 12 月 31 日) |
DD 是表示指定月份中的某一天的两位数字,范围为从 01 到 31(最高值取决于具体月份)。 | 10 位 | 固定 3 个字节 | 一天 | 此值用于从 time 隐式转换到 datetime2 或 datetimeoffset 时追加的日期部分。 | 公历 | 否 | 否 | 否 | ||
| datetime | 默认的字符串文字格式不适用 | 1753 年 1 月 1 日到 9999 年 12 月 31 日 | 00:00:00 到 23:59:59.997 | None | n* 为一个 0 到 3 位的数字,范围为 0 到 999,表示秒的小数部分。 |
最低 19 位到最高 23 位 |
8 字节 | 舍入到 .000、.003 或 .007 秒三个增量。 | 1900-01-01 00:00:00 | 公历(不包括完整的年份范围。) | 否 | 否 | 否 |
| datetime2 [ (fractional seconds precision) ] | YYYY-MM-DD hh:mm:ss[.fractional seconds] | 公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日 | 00:00:00 到 23:59:59.9999999 | None | 在 Informatica 中,当 n > 3 时,秒的小数部分会被截断。 | 最低 19 位 (YYYY-MM-DD hh:mm:ss ),最高 27 位 (YYYY-MM-DD hh:mm:ss.0000000) | 所有其他精度则需要 8 个字节。 | 100 纳秒 | 1900-01-01 00:00:00 | 公历 | 用户帐户控制 | 否 | 否 |
| datetimeoffset [ (fractional seconds precision) ] | YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm] | 公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日 | 00:00:00 至 23:59:59.9999999(Informatica 不支持秒的小数部分) | -14:00 到 +14:00(Informatica 中忽略时区偏移量) | Informatica 忽略时区偏移量。 | 最低 26 位 (YYYY-MM-DD hh:mm:ss {+ | 默认值为 10 个字节的固定大小,默认的秒的小数部分精度为 100ns。 | 100 纳秒 |
1900-01-01 00:00:00 00:00 |
公历 | 用户帐户控制 | 用户帐户控制 | 否 |
| smalldatetime | 不适用 | 1900 年 1 月 1 日到 2079 年 6 月 6 日 | 2007-05-10 00:00:00 | YYYY 是表示年份的四位数字,范围为 1900 到 2079。 小于或等于 29.998 秒的值向下舍入为最接近的分钟数;大于或等于 29.999 秒的值向上舍入为最接近的分钟数。 |
最高 19 位 | 固定 4 个字节 |
一分钟 |
1900-01-01 00:00:00 | (不包括完整的年份范围。) | 否 | 否 | 否 | |
| time [ (fractional second scale) ] | 对于 Informatica,为 hh:mm:ss[.nnnnnnn]) | 00:00:00.0000000 到 23:59:59.9999999(对于 Informatica,为 00:00:00.000 到 23:59:59.999) | 对于 Informatica,n* 是零到三位数字,范围为 0 到 999。 | 对于 Informatica,最大值为 12 位 (hh:mm:ss.nnn)。 | 在 Informatica 中,默认为 4 个字节,固定不变,同时秒的小数部分精度默认为 1 毫秒。 | 100 纳秒(Informatica 中为 1 毫秒) | 此值用作从 date 隐式转换到datetime2 或 datetimeoffset 时追加的时间部分。 | 用户帐户控制 | 否 | 否 |
cursor
有些操作可以引用那些具有 cursor 数据类型的变量和参数,这些操作包括:
- DECLARE @local_variable 和 SET @local_variable 语句。
- OPEN、FETCH、CLOSE 及 DEALLOCATE 游标语句。
- 存储过程输出参数。
- CURSOR_STATUS 函数。
- sp_cursor_list、sp_describe_cursor、sp_describe_cursor_tables 以及 sp_describe_cursor_columns 系统存储过程。
对于 CREATE TABLE 语句中的列,不能使用 cursor 数据类型。
rowversion
若要记录日期或时间,请使用 datetime2 数据类型。
(例如,如果某列的值为 5,且更新语句将该值设置为 5,即使没有发生任何更改,此操作也被视为更新,并且 rowversion 发生递增。)
在 DDL 语句中,应尽量使用 rowversion,而不是 timestamp。
binary 和 varbinary
| 数据类型 | 定义 | 取值范围 | 储存大小 | ISO | 何时使用... |
|---|---|---|---|---|---|
| binary [ ( n ) ] | 长度为 n 字节的固定长度二进制数据。 | n 是从 1 到 8,000 的值。 | 存储大小为 n 字节。 | 列数据项的大小一致。 | |
| varbinary [ ( n | max) ] | 可变长度二进制数据。 |
n 的取值范围为 1 至 8,000。 max 指示最大存储大小是 2^31-1 个字节。 |
存储大小为所输入数据的实际长度 + 2 个字节。 所输入数据的长度可以是 0 字节。 |
[n]列数据项的大小差异相当大。 [max]列数据条目超出 8,000 字节。 |
|
| char [ ( n ) ] | 固定长度,非 Unicode 字符串数据。 | n 用于定义字符串长度,并且它必须为 1 到 8,000 之间的值。 | 存储大小为 n 字节。 | char 的 ISO 同义词是 character | |
| varchar [ ( n | max ) ] | 可变长度,非 Unicode 字符串数据。 | max 指示最大存储大小是 2^31-1 个字节 (2 GB)。 | 存储大小为所输入数据的实际长度 + 2 个字节。 | varchar 的 ISO 同义词是 charvarying 或 charactervarying | |
| nchar [ ( n ) ] | 固定长度的 Unicode 字符串数据。 | n 用于定义字符串长度,并且它必须为 1 到 4,000 之间的值。 |
存储大小为 n 字节的两倍。 根据字符串的不同,n 个字节的存储大小可能小于为 n 指定的值。 |
nchar 的 ISO 同义词是 national char 和 national character | |
| nvarchar [ ( n | max ) ] | 可变长度的 Unicode 字符串数据。 | max 指示最大存储大小是 2^30-1 个字符。 | 实际存储大小(以字节为单位)是所输入字符个数的两倍 + 2 个字节。 | nvarchar 的 ISO 同义词是 national char varying 和 national character varying。 | |
| ntext | 长度可变的 Unicode 数据,字符串最大长度为 2^30 - 1 (1,073,741,823) 个字节。 | 存储大小是所输入字符串长度的两倍(以字节为单位)。 | ntext 的 ISO 同义词为 national text。 | ||
| text | 服务器代码页中长度可变的非 Unicode 数据,字符串最大长度为 2^31-1 (2,147,483,647) 个字节。 | 根据字符串,存储大小可能小于 2,147,483,647 字节。 | |||
| image | 长度可变的二进制数据。 | 从 0 到 2^31-1 (2,147,483,647) 个字节。 |
空间类型 - geography
SQL Server geography 数据类型存储诸如 GPS 纬度和经度坐标之类的椭球体(圆形地球)数据。
Microsoft 扩展所定义的 geography 方法。
extents 表示 geography 对象的各点之间的近似最大距离。
可以用在持久化和非持久化计算列中。
sql_variant
借助 sql_variant,这些数据库对象可以支持其他数据类型的值。
例如,定义为 sql_variant 的列可以存储 int、binary 和 char 类型的值。
实际基类型值的最大长度是 8,000 个字节。
对于 sql_variant 数据类型,必须先将它转换为其基本数据类型值,然后才能参与诸如加减这类运算。
此外,sql_variant 不能使用其他 sql_variant 作为其基础类型。
该最大长度是 900 个字节。
一个表可以包含任意多个 sql_variant 列。
不能在 CONTAINSTABLE 和 FREETEXTTABLE 中使用 sql_variant。
例如,包含字符串数据 'PS2091' 的 sql_variant 列将作为 0x505332303931 返回。
表
table 变量可用于函数、存储过程和批处理中。
uniqueidentifier
存储空间为16 字节 GUID。
uniqueidentifier数据类型的列或局部变量可通过以下方式初始化为一个值:
- 通过使用 NEWID 或 NEWSEQUENTIALID 函数。
- 例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 为有效的 uniqueidentifier 值。
除 IDENTITY 之外的所有列约束和属性均可对 uniqueidentifier 数据类型使用。
具有更新订阅的合并复制和事务复制使用 uniqueidentifier 列来确保在表的多个副本中唯一地标识行。
XML
可在列中或者 xml 类型的变量中存储 xml 实例。
存储的 xml 数据类型表示实例大小不能超过 2 GB。
CONTENT 和 DOCUMENT 方面仅应用于类型化的 XML.
这是默认行为。
不允许在顶层使用文本节点。
若要创建类型化的 xml 列或变量,可选择指定 XML 架构集合名称。