Поделиться через


Загрузка данных с помощью INSERT в параллельное хранилище данных

Инструкцию tsql INSERT можно использовать для загрузки данных в распределенную или реплицированную таблицу sql Server Parallel Data Warehouse (PDW). Дополнительные сведения о INSERT см. в разделе INSERT. Для реплицированных таблиц и всех столбцов, отличных от распределения в распределенной таблице, PDW использует SQL Server для неявного преобразования значений данных, указанных в инструкции, в тип данных целевого столбца. Дополнительные сведения о правилах преобразования данных SQL Server см. в разделе "Преобразование типов данных" для SQL. Однако для столбцов распространения PDW поддерживает только подмножество неявных преобразований, поддерживаемых SQL Server. Поэтому при использовании инструкции INSERT для загрузки данных в столбец распространения исходные данные должны быть указаны в одном из форматов, определенных в следующих таблицах.

Вставка литерала в двоичные типы

В следующей таблице определены принятые типы литералов, формат и правила преобразования для вставки литерального значения в столбец распределения двоичного типа (n) или varbinary(n).

Литеральный тип Формат Правила преобразования
Двоичный литерал 0xhexidecimal_string

Пример: 0x12Ef
Двоичные литералы должны быть префиксированы с 0x.

Длина источника данных не может превышать количество байтов, указанных для типа данных.

Если длина источника данных меньше размера двоичного типа данных, данные заполняются справа от нуля, чтобы достичь размера типа данных.

Вставка литерала в типы даты и времени

Литералы даты и времени представлены с помощью символьных значений в определенных форматах, заключенных в одинарные кавычки. В следующих таблицах определяются допустимые типы литералов, формат и правила преобразования для вставки литерала даты или времени в столбец распределения PDW SQL Server типа datetime, smalldatetime, date, time, datetimeoffset или datetime2.

Тип данных datetime

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения даты и времени типа. Любая пустая строка (') преобразуется в значение по умолчанию "1900-01-01 12:00:00.000". Строки, содержащие только пустые (" ") создают ошибку.

Литеральный тип Формат Правила преобразования
Строковый литерал в формате datetime 'ГГГГ-ММ-ДД чч:мм:сс[.nnn]'

Пример: '2007-05-08 12:35:29.123'
Отсутствующие дробные цифры имеют значение 0 при вставке значения. Например, литерал "2007-05-08 12:35" вставляется как "2007-05-08 12:35:00.000".
Строковый литерал в формате smalldatetime 'ГГГГ-ММ-ДД чч:мм'

Пример: '2007-05-08 12:35'
Секунды и оставшиеся дробные цифры имеют значение 0 при вставке значения.
Строковый литерал в формате даты 'ГГГГ-ММ-ДД'

Пример: '2007-05-08'
Значения времени (час, минуты, секунды и дроби) задаются в значение 12:00:00.000 при вставке значения.
Строковый литерал в формате datetime2 'ГГГГ-ММ-ДД чч:мм:ss.nnnnnnnnnnn'

Пример: '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 'ГГГГ-ММ-ДД чч:мм' или 'ГГГГ-ММ-ДД чч:мм:00'

Пример: "2007-05-08 12:00" или "2007-05-08 12:00:00"
Исходные данные должны иметь значения в течение года, месяца, даты, часа и минуты. Секунды являются необязательными и, если они присутствуют, должны иметь значение 00. Любое другое значение создает ошибку.
Строковый литерал в формате даты 'ГГГГ-ММ-ДД'

Пример: '2007-05-08'
Значения времени (час, минуты, секунды и дроби) имеют значение 0 при вставке значения.

Тип данных date

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец типа типа. Любая пустая строка (') преобразуется в значение по умолчанию "1900-01-01". Строки, содержащие только пустые (" ") создают ошибку.

Литеральный тип Формат Правила преобразования
Строковый литерал в формате даты 'ГГГГ-ММ-ДД'

Пример: '2007-05-08'
Это единственный допустимый формат.

Тип данных времени

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения времени типа. Любая пустая строка (') преобразуется в значение по умолчанию "00:00:00.0000". Строки, содержащие только пустые (" ") создают ошибку.

Литеральный тип Формат Правила преобразования
Строковый литерал в формате времени 'hh:mm:ss.nnnnnnnnn'

Пример: '12:35:29.1234567'
Если источник данных имеет меньшую или равную точность (число дробных цифр), чем точность типа данных времени , данные будут заполнены справа с нулями. Например, литеральное значение "12:35:29.123" вставляется как "12:35:29.1230000".

Значение, которое имеет большую точность, чем целевой тип данных, отклоняется.

Тип данных datetimeoffset

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения типа datetimeoffset (n). Формат по умолчанию — YYYY-MM-DD hh:mm:ss.nnnnn {+|-}hh:mm. Пустая строка (') преобразуется в значение по умолчанию "1900-01-01 12:00:00.0000000 +00:00".. Строки, содержащие только пустые (" ") создают ошибку. Количество дробных цифр зависит от определения столбца. Например, столбец, определенный как datetimeoffset (2), будет иметь две дробные цифры.

Литеральный тип Формат Правила преобразования
Строковый литерал в формате datetime 'ГГГГ-ММ-ДД чч:мм:сс[.nnn]'

Пример: '2007-05-08 12:35:29.123'
Отсутствующие дробные цифры и значения смещения имеют значение 0 при вставке значения. Например, литерал "2007-05-08 12:35:29.123" вставляется как "2007-05-08 12:35:29.123000000 +00:00".
Строковый литерал в формате smalldatetime 'ГГГГ-ММ-ДД чч:мм'

Пример: '2007-05-08 12:35'
В секундах остальные дробные цифры и значения смещения имеют значение 0 при вставке значения.
Строковый литерал в формате даты 'ГГГГ-ММ-ДД'

Пример: '2007-05-08'
Значения времени (час, минуты, секунды и дроби) имеют значение 0 при вставке значения. Например, литерал "2007-05-08" вставляется как "2007-05-08 00:00:0000000 +000:000".
Строковый литерал в формате datetime2 'ГГГГ-ММ-ДД чч:мм:ss.nnnnnnnnnnn'

Пример: '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 'ГГГГ-ММ-ДД чч:мм:ss.nnnnn {+|-} 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 'ГГГГ-ММ-ДД чч:мм:сс[.nnn]'

Пример: '2007-05-08 12:35:29.123'
Дробные секунды являются необязательными и имеют значение 0 при вставке значения.

Значение, которое имеет более дробные цифры, чем целевой тип данных, отклоняется.
Строковый литерал в формате smalldatetime 'ГГГГ-ММ-ДД чч:мм'

Пример: '2007-05-08 12'
Необязательные секунды и оставшиеся дробные цифры имеют значение 0 при вставке значения.
Строковый литерал в формате даты 'ГГГГ-ММ-ДД'

Пример: '2007-05-08'
Значения времени (час, минуты, секунды и дроби) имеют значение 0 при вставке значения. Например, литерал "2007-05-08" вставляется как "2007-05-08 12:00:00000000".
Строковый литерал в формате datetime2 'ГГГГ-ММ-ДД чч:мм:сс:nnnnnnnnn'

Пример: '2007-05-08 12:35:29.1234567'
Если источник данных содержит данные и компоненты времени, которые меньше или равны значению, указанному в datetime2(n), данные вставляются; в противном случае возникает ошибка.

Вставка литерала в числовые типы

В следующих таблицах определяются принятые форматы и правила преобразования для вставки литерального значения в столбец распределения PDW SQL Server, использующий числовый тип.

bit, тип данных

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения бита типа. Пустая строка (') или строка, содержащая только пустые (" ") преобразуется в 0.

Литеральный тип format Правила преобразования
Строковый литерал в целочисленном формате 'nnnnnnnnnnnnnn'

Пример: "1" или "321"
Целочисленное значение, отформатируемое как строковый литерал, не может содержать отрицательное значение. Например, значение "-123" создает ошибку.

Значение, превышающее 1, преобразуется в 1. Например, значение "123" преобразуется в 1.
Строковый литерал "TRUE" или "FALSE"

Пример: true
Значение TRUE преобразуется в 1; Значение FALSE преобразуется в 0.
Целочисленный литерал nnnnnn

Пример: 1 или 321
Значение больше 1 или меньше 0 преобразуется в 1. Например, значения 123 и -123 преобразуются в 1.
Десятичный литерал nnnnn.nn

Пример: 1234.5678
Значение больше 1 или меньше 0 преобразуется в 1. Например, значения 123.45 и -123.45 преобразуются в 1.

тип данных decimal

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения десятичного типа (p,s). Правила преобразования данных совпадают с правилами sql Server. Дополнительные сведения см. в разделе "Преобразование типов данных" в MSDN.

Литеральный тип Формат
Строковый литерал в целочисленном формате 'nnnnnnnnnnnnnn'

Пример: "321312313123"
Строковый литерал в десятичном формате 'nn.nnnnn'

Пример: '123344.34455'
Целочисленный литерал nnnnnnnn

Пример: 321312313123
Десятичный литерал nn.nnn

Пример: '123344.34455'

Типы данных float и real

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения типа float или real. Правила преобразования данных совпадают с правилами sql Server. Дополнительные сведения см. в разделе "Преобразование типов данных" в MSDN.

Литеральный тип Формат
Строковый литерал в целочисленном формате 'nnnnnnnnnnnnnn'

Пример: "321312313123"
Строковый литерал в десятичном формате 'nn.nnnnn'

Пример: '123344.34455'
Строковый литерал в формате с плавающей запятой 'n.nnnnnE+nn'

Пример: '3.12323E+14'
Целочисленный литерал nnnnnnnn

Пример: 321312313123
Десятичный литерал nn.nnn

Пример: 123344.34455
Литерал с плавающей запятой n.nnnnnE+nn

Пример: 3.12323E+14

int, bigint, tinyint, smallint data types

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения типа int, bigint, tinyint или smallint. Источник данных не может превышать диапазон, допустимый для заданного типа данных. Например, диапазон для tinyint составляет от 0 до 255, а диапазон для int равен -2 147 483 648 до 2 147 483 647.

Тип литерала Формат Правила преобразования
Строковый литерал в целочисленном формате 'nn'

Пример: "321312313123"
None
Целочисленный литерал nn

Пример: 321312313123
None
Десятичный литерал nn.nnn

Пример: 123344.34455
Значения справа от десятичной запятой усечены.

Типы данных money и smallmoney

Денежные литеральные значения представлены в виде чисел с необязательной десятичной запятой и символом валюты в виде префикса. Источник данных не может превышать диапазон, допустимый для заданного типа данных. Например, диапазон для небольших денег составляет -214 748,3648 до 214 748,3647, а диапазон для денег составляет -922 337 203 685 477,5808 до 922 337 203 685 477,5807. В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения типа money или smallmoney.

Литеральный тип Формат Правила преобразования
Строковый литерал в целочисленном формате 'nnnnnnnnnn'

Пример: "123433"
Отсутствующие цифры после десятичной запятой имеют значение 0 при вставке значения. Например, литерал 12345 вставляется как 12345,0000.
Строковый литерал в десятичном формате 'nn.nnnnn'

Пример: '123344.34455'
Если число цифр после десятичной запятой превышает 4, значение округляется до ближайшего значения. Например, значение 1233444.34455 вставляется как 1233444.3446.
Строковый литерал в формате денег '$nnnnnn.nnnn'

Пример: '$123456.7890'
Необязательный символ валюты не вставляется со значением.

Если число цифр после десятичной запятой превышает 4, значение округляется до ближайшего значения.
Целочисленный литерал nnnnnn

Пример: 123433
Отсутствующие цифры после десятичной запятой имеют значение 0 при вставке значения. Например, литерал 12345 вставляется как 12345,0000.
Десятичный литерал nn.nnn

Пример: 123344.34455
Если число цифр после десятичной запятой превышает 4, значение округляется до ближайшего значения. Например, значение 1233444.34455 вставляется как 1233444.3446.
Деньги литерал $nnnnnn.nnnn

Пример: $123456,7890
Необязательный символ валюты не вставляется со значением.

Если число цифр после десятичной запятой превышает 4, значение округляется до ближайшего значения.

Вставка литерала в типы строк

В следующих таблицах определяются принятые форматы и правила преобразования для вставки литерального значения в столбец PDW SQL Server, использующий строковый тип.

char, varchar, nchar и nvarchar data types

В следующей таблице определены принятые форматы и правила для вставки литеральных значений в столбец распределения типа char, varchar, nchar и nvarchar. Длина источника данных не может превышать размер, указанный для типа данных. Если длина источника данных меньше размера типа данных char или nchar , данные заполняются справа с пустыми пробелами, чтобы достичь размера типа данных.

Тип литерала Формат Правила преобразования
Строковый литерал Формат: символьная строка

Пример: abc
None
Строковый литерал Юникода Формат: N'символьная строка'

Пример: N'abc'
None
Целочисленный литерал Формат: nnnnnnn

Пример: 321312313123
None
Десятичный литерал Формат: nn.nnnnnnnnn

Пример: 12344.34455
None
Деньги литерал Формат: $nnnnnn.nnnnn

Пример: $123456.99
Символ валюты не вставляется со значением. Чтобы вставить символ валюты, вставьте значение в виде строкового литерала. Это будет соответствовать формату средства dwloader , который обрабатывает каждый литерал как строковый литерал.

Запятые не допускаются.

Если число цифр после десятичной запятой превышает 2, значение округляется до ближайшего значения. Например, значение 123.946789 вставляется как 123.95.

Только стиль по умолчанию 0 (без запятых и 2 цифры после десятичной запятой) допускается при использовании функции CONVERT для вставки денежных литералы.

См. также

Распределенные данные
INSERT