你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文中包含有关在专用 SQL 池中定义表数据类型的建议。
支持的数据类型
专用 SQL 池(前 SQL DW)支持最常用的数据类型。 有关支持的数据类型的列表,请参阅 CREATE TABLE 语句中的 数据类型 。
最小化行长度
最大程度地减少数据类型的大小可缩短行长度,从而提高查询性能。 使用适用于数据的最小数据类型。
- 避免定义具有较大默认长度的字符列。 例如,如果最长值为 25 个字符,则将列定义为 VARCHAR(25)。
- 如果只需要 VARCHAR,请避免使用 NVARCHAR 。
- 如果可能,请使用 NVARCHAR(4000) 或 VARCHAR(8000),而不是 NVARCHAR(MAX) 或 VARCHAR(MAX)。
如果使用 PolyBase 外部表加载表,则表行的定义长度不能超过 1 MB。 当具有可变长度数据的行超过 1 MB 时,可以使用 BCP 加载该行,但不能使用 PolyBase 加载该行。
标识不支持的数据类型
如果要从另一个 SQL 数据库迁移数据库,可能会发现专用 SQL 池中不支持的数据类型。 使用以下查询发现现有 SQL 架构中不支持的数据类型:
SELECT t.[name], c.[name], c.[system_type_id], c.[user_type_id], y.[is_user_defined], y.[name]
FROM sys.tables t
JOIN sys.columns c on t.[object_id] = c.[object_id]
JOIN sys.types y on c.[user_type_id] = y.[user_type_id]
WHERE y.[name] IN ('geography','geometry','hierarchyid','image','text','ntext','sql_variant','xml')
AND y.[is_user_defined] = 1;
不受支持的数据类型的解决方法
以下列表显示了专用 SQL 池(前 SQL DW)不支持的数据类型,并为不支持的数据类型提供有用的替代方法。
| 不支持的数据类型 | 解决方法 |
|---|---|
| geometry | varbinary |
| geography | varbinary |
| hierarchyid | nvarchar(4000) |
| 图像 | varbinary |
| text | varchar |
| ntext | nvarchar |
| sql_variant | 将列拆分为多个强类型列。 |
| table | 转换为临时表。 |
| 时间戳 | 修改代码以使用 datetime2 和 CURRENT_TIMESTAMP 函数。 仅支持常量作为默认值,因此current_timestamp不能定义为默认约束。 如果需要将时间戳类型列中的行版本值迁移,请使用 BINARY(8)或 VARBINARY(8)来处理 NOT NULL 或 NULL 的行版本值。 |
| xml | varchar |
| 用户定义的类型 | 尽可能转换回原生数据类型。 |
| 默认值 | 默认值仅支持文本和常量。 |
后续步骤
有关开发表的详细信息,请参阅 表概述。