使用 INSERT 将数据加载到 Parallel Data Warehouse

可以使用 tsql INSERT 语句将数据加载到 SQL Server Parallel Data Warehouse(PDW) 分布式表或复制表。 有关 INSERT 的详细信息,请参阅 INSERT。 对于复制的表和分布式表中的所有非分布列,PDW 使用 SQL Server 将语句中指定的数据值隐式转换为目标列的数据类型。 有关 SQL Server 数据转换规则的详细信息,请参阅 SQL 的数据类型转换。 但是,对于分布列,PDW 仅支持 SQL Server 支持的隐式转换中的一部分。 因此,使用 INSERT 语句将数据加载到分布列中时,必须以下表中定义的格式之一指定源数据。

将文本插入二进制类型

下表定义了用于将文本值插入类型 binary (n) 或 varbinary(n) 的分布列的可接受文本类型、格式和转换规则。

文本类型 格式 转换规则
二进制文本 0xhexidecimal_string

示例:0x12Ef
二进制文本必须以 0x 作为前缀。

数据源长度不能超过为数据类型指定的字节数。

如果数据源长度小于 binary 数据类型的大小,则数据在右侧补充零,以达到数据类型大小。

将文本插入日期和时间类型

日期和时间文本使用特定格式的字符值来表示,并使用单引号括起来。 下表定义了允许的文本类型、格式和转换规则,用于将日期或时间文本插入到 datetimesmalldatetimedatetimedatetimeoffsetdatetime2 类型的 SQL Server PDW 分布列中。

datetime 数据类型

下表定义了用于将文本值插入 datetime 类型的分布列的接受格式和规则。 任何空字符串 ('') 都转换为默认值 '1900-01-01 12:00:00.000'。 仅包含空白的字符串 (' ') 将生成错误。

文本类型 格式 转换规则
datetime 格式的字符串文本 'YYYY-MM-DD hh:mm:ss[.nnn]'

示例:'2007-05-08 12:35:29.123'
插入值时,缺少的小数位数补为 0。 例如,文本 '2007-05-08 12:35' 插入为 '2007-05-08 12:35:00.000'。
smalldatetime 格式的字符串文本 'YYYY-MM-DD hh:mm'

示例:'2007-05-08 12:35'
插入值时,秒和其余的小数位数补为 0。
date 格式的字符串文本 'YYYY-MM-DD'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 12:00:00.000。
datetime2 格式的字符串文本 'YYYY-MM-DD hh:mm:ss.nnnnnnn'

示例:'2007-05-08 12:35:29.1234567'
源数据不能超过三个小数位。 例如,文本 '2007-05-08 12:35:29.123' 会被插入,但值 '2007-05-08 12:35:29.1234567' 将生成错误。

smalldatetime 数据类型

下表定义了用于将文本值插入 smalldatetime 类型的分布列的接受格式和规则。 任何空字符串 ('') 都转换为默认值 '1900-01-01 12:00'。 仅包含空白的字符串 (' ') 将生成错误。

文本类型 格式 转换规则
smalldatetime 格式的字符串文本 'YYYY-MM-DD hh:mm' 或 'YYYY-MM-DD hh:mm:00'

示例:'2007-05-08 12:00' 或 '2007-05-08 12:00:00'
源数据必须具有年份、月、日期、小时和分钟的值。 秒是可选的,如果存在,必须设置为值 00。 任何其他值都会产生错误。
date 格式的字符串文本 'YYYY-MM-DD'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 0。

date 数据类型

下表定义了用于将文本值插入 date 类型的分布列的接受格式和规则。 任何空字符串 ('') 都转换为默认值 '1900-01-01'。 仅包含空白的字符串 (' ') 将生成错误。

文本类型 格式 转换规则
date 格式的字符串文本 'YYYY-MM-DD'

示例:'2007-05-08'
这是唯一接受的格式。

time 数据类型

下表定义了用于将文本值插入 time 类型的分布列的接受格式和规则。 任何空字符串 ('') 都转换为默认值 '00:00:00.0000'。 仅包含空白的字符串 (' ') 将生成错误。

文本类型 格式 转换规则
time 格式的字符串文本 'hh:mm:ss.nnnnnnn'

示例:'12:35:29.1234567'
如果数据源的精度(小数位数)小于或等于 time 数据类型的精度,则数据在右侧补充零。 例如,文本 '12:35:29.123' 插入为 '12:35:29.1230000'。

拒绝精度大于目标数据类型的值。

datetimeoffset 数据类型

下表定义了用于将文本值插入 datetimeoffset (n) 类型的分布列的接受格式和规则。 默认格式为 'YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm'。 空字符串 ('') 转换为默认值 '1900-01-01 12:00:00.0000000 +00:00'。 仅包含空白的字符串 (' ') 将生成错误。 小数位数取决于列定义。 例如,定义为 datetimeoffset (2) 的列将具有两个小数位数。

文本类型 格式 转换规则
datetime 格式的字符串文本 'YYYY-MM-DD hh:mm:ss[.nnn]'

示例:'2007-05-08 12:35:29.123'
插入值时,缺少的小数位数和偏移值设置为 0。 例如,文本 '2007-05-08 12:35:29.123' 插入为 '2007-05-08 12:35:29.1230000 +00:00'。
smalldatetime 格式的字符串文本 'YYYY-MM-DD hh:mm'

示例:'2007-05-08 12:35'
插入值时,秒、其余的小数位数和偏移值设为 0。
date 格式的字符串文本 'YYYY-MM-DD'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 0。 例如,文本 '2007-05-08' 插入为 '2007-05-08 00:00:00.0000000 +00:00'。
datetime2 格式的字符串文本 'YYYY-MM-DD hh:mm:ss.nnnnnnn'

示例:'2007-05-08 12:35:29.1234567'
源数据不能超过 datetimeoffset 列中的指定秒数小数值。 如果数据源具有较小或相等的秒数小数值,则数据用零填充到右侧。 例如,如果数据类型为 datetimeoffset (5),则文本值 '2007-05-08 12:35:29.123 +12:15' 插入为 '12:35:29.12300 +12:15'。
datetimeoffset 格式的字符串文本 'YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-} hh:mm'

示例:'2007-05-08 12:35:29.1234567 +12:15'
源数据不能超过 datetimeoffset 列中的指定秒数小数值。 如果数据源具有较小或相等的秒数小数值,则数据用零填充到右侧。 例如,如果数据类型为 datetimeoffset (5),则文本值 '2007-05-08 12:35:29.123 +12:15' 插入为 '12:35:29.12300 +12:15'。

datetime2 数据类型

下表定义了用于将文本值插入 datetime2 (n) 类型的分布列的接受格式和规则。 默认格式为 'YYYY-MM-DD hh:mm:ss.nnnnnnn'。 空字符串 ('') 转换为默认值 '1900-01-01 12:00:00'。 仅包含空白的字符串 (' ') 将生成错误。 小数位数取决于列定义。 例如,定义为 datetime2 (2) 的列将具有两个小数位数。

文本类型 格式 转换规则
datetime 格式的字符串文本 'YYYY-MM-DD hh:mm:ss[.nnn]'

示例:'2007-05-08 12:35:29.123'
秒的小数值是可选的,在插入值时设置为 0。

拥有比目标数据类型更多小数位数的值将被拒绝。
smalldatetime 格式的字符串文本 'YYYY-MM-DD hh:mm'

示例:'2007-05-08 12'
插入值时,可选的秒和其余的小数位数补为 0。
date 格式的字符串文本 'YYYY-MM-DD'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 0。 例如,文本 '2007-05-08' 插入为 '2007-05-08 12:00:00.0000000'。
datetime2 格式的字符串文本 'YYYY-MM-DD hh:mm:ss:nnnnnnn'

示例:'2007-05-08 12:35:29.1234567'
如果数据源包含小于或等于 datetime2(n) 中指定值的数据和时间部分,则插入数据;否则将生成错误。

将文本插入数值类型

下表定义了用于将文本值插入使用数值类型的 SQL Server PDW 分布列的接受格式和转换规则。

bit 数据类型

下表定义了用于将文本值插入 bit 类型的分布列的接受格式和规则。 空字符串 ('') 或仅包含空白的字符串 (' ') 转换为 0。

文本类型 format 转换规则
integer 格式的字符串文本 'nnnnnnnnnn'

示例:'1' 或 '321'
格式化为字符串文本的整数值不能包含负值。 例如,值 '-123' 生成错误。

大于 1 的值转换为 1。 例如,值 '123' 转换为 1。
字符串文本 'TRUE' 或 'FALSE'

示例:'true'
值 'TRUE' 转换为 1;值 'FALSE' 转换为 0。
整数文本 nnnnnnnn

示例:1 或 321
大于 1 或小于 0 的值转换为 1。 例如,值 123 和 -123 都转换为 1。
小数文本 nnnnn.nnnn

示例:1234.5678
大于 1 或小于 0 的值转换为 1。 例如,值 123.45 和 -123.45 转换为 1。

decimal 数据类型

下表定义了用于将文本值插入 decimal (p,s) 类型的分布列的接受格式和规则。 数据转换规则与 SQL Server 相同。 有关详细信息,请参阅 MSDN 上的数据类型转换

文本类型 格式
integer 格式的字符串文本 'nnnnnnnnnnnn'

示例:'321312313123'
decimal 格式的字符串文本 'nnnnnn.nnnnn'

示例:'123344.34455'
整数文本 nnnnnnnnnnnn

示例:321312313123
小数文本 nnnnnn.nnnnn

示例:'123344.34455'

float 和 real 数据类型

下表定义了用于将文本值插入 floatreal 类型的分布列的接受格式和规则。 数据转换规则与 SQL Server 相同。 有关详细信息,请参阅 MSDN 上的数据类型转换

文本类型 格式
integer 格式的字符串文本 'nnnnnnnnnnnn'

示例:'321312313123'
decimal 格式的字符串文本 'nnnnnn.nnnnn'

示例:'123344.34455'
floating point 格式的字符串文本 'n.nnnnnE+nn'

示例:'3.12323E+14'
整数文本 nnnnnnnnnnnn

示例:321312313123
小数文本 nnnnnn.nnnnn

示例:123344.34455
浮点文本 n.nnnnnE+nn

示例:3.12323E+14

int、bigint、tinyint、smallint 数据类型

下表定义了用于将文本值插入 intbiginttinyintsmallint 类型的分布列的接受格式和规则。 数据源不能超过给定数据类型允许的范围。 例如,tinyint 的范围为 0 到 255,int 的范围为 -2,147,483,648 到 2,147,483,647。

文本类型 格式 转换规则
integer 格式的字符串文本 'nnnnnnnnnnnnnn'

示例:'321312313123'
整数文本 nnnnnnnnnnnnnn

示例:321312313123
小数文本 nnnnnn.nnnnn

示例:123344.34455
小数点右侧的值将被截断。

money 和 smallmoney 数据类型

money 文本值以数字表示,其中前缀为可选的小数点和货币符号。 数据源不能超过给定数据类型允许的范围。 例如,smallmoney 的范围是 -214,748.3648 到 214,748.3647,money 的范围是 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。 下表定义了用于将文本值插入 moneysmallmoney 类型的分布列的接受格式和规则。

文本类型 格式 转换规则
integer 格式的字符串文本 'nnnnnnnn'

示例:'123433'
插入值时,小数点后面的缺失数位设置为 0。 例如,文本 '12345' 插入为 12345.0000。
decimal 格式的字符串文本 'nnnnnn.nnnnn'

示例:'123344.34455'
如果小数点后的位数超过 4,则该值向上舍入为最接近的值。 例如,值 '123344.34455' 插入为 123344.3446。
money 格式的字符串文本 '$nnnnnn.nnnn'

示例:'$123456.7890'
可选货币符号不随值一起插入。

如果小数点后的位数超过 4,则该值向上舍入为最接近的值。
整数文本 nnnnnnnn

示例:123433
插入值时,小数点后面的缺失数位设置为 0。 例如,文本 12345 插入为 12345.0000。
小数文本 nnnnnn.nnnnn

示例:123344.34455
如果小数点后的位数超过 4,则该值向上舍入为最接近的值。 例如,值 123344.34455 插入为 123344.3446。
Money 文本 $nnnnnn.nnnn

示例:$123456.7890
可选货币符号不随值一起插入。

如果小数点后的位数超过 4,则该值向上舍入为最接近的值。

将文本插入字符串类型

下表定义了用于将文本值插入使用字符串类型的 SQL Server PDW 列的接受格式和转换规则。

char、varchar、nchar 和 nvarchar 数据类型

下表定义了用于将文本值插入 charvarcharncharnvarchar 类型的分布列的接受格式和规则。 数据源长度不能超过为数据类型指定的大小。 如果数据源长度小于 charnchar 数据类型的大小,则在右侧补充空格以达到数据类型大小。

文本类型 格式 转换规则
字符串文本 格式:'character string'

示例:'abc'
Unicode 字符串文本 格式:N'character string'

示例:N'abc'
整数文本 格式:nnnnnnnnnnn

示例:321312313123
小数文本 格式:nnnnnn.nnnnnnn

示例:12344.34455
Money 文本 格式:$nnnnnn.nnnnn

示例:$123456.99
货币符号不随值一起插入。 要插入货币符号,请将值作为字符串文本插入。 这将匹配 dwloader 工具的格式,该工具将每个文本视为字符串文本。

不允许使用逗号。

如果小数点后的位数超过 2,则该值向上舍入为最接近的值。 例如,值 123.946789 插入为 123.95。

使用 CONVERT 函数插入 money 文本时,仅允许默认样式 0(小数点后没有逗号和有 2 位数字)。

另请参阅

分布式数据
INSERT