Compartir por


Carga de datos con INSERT en Almacenamiento de datos paralelos

Puede usar la instrucción INSERT de T-SQL para cargar datos en una tabla distribuida o replicada de Almacenamiento de datos paralelos (PDW) de SQL Server. Para más información sobre INSERT, vea INSERT. Para las tablas replicadas y todas las columnas que no son de distribución de una tabla distribuida, PDW usa SQL Server para convertir implícitamente los valores de datos especificados en la instrucción al tipo de datos de la columna de destino. Para más información sobre las reglas de conversión de datos de SQL Server, vea Conversión de tipos de datos para SQL. Pero para las columnas de distribución, PDW solo admite un subconjunto de conversiones implícitas compatibles con SQL Server. Por tanto, cuando use la instrucción INSERT para cargar datos en una columna de distribución, los datos de origen se deben especificar en uno de los formatos definidos en las tablas siguientes.

Inserción de literales en tipos binarios

En la tabla siguiente se definen los tipos literales aceptados, el formato y las reglas de conversión para insertar un valor literal en una columna de distribución de tipo binary (n) o varbinary(n).

Tipo de literal Formato Reglas de conversión
Literal binario 0xcadena_hexadecimal

Ejemplo: 0x12Ef
Los literales binarios deben tener el prefijo 0x.

La longitud del origen de datos no puede superar el número de bytes especificados para el tipo de datos.

Si la longitud del origen de datos es menor que el tamaño del tipo de datos binary, los datos se rellenan a la derecha con ceros para alcanzar el tamaño del tipo de datos.

Inserción de literales en tipos de fecha y hora

Los tipos de fecha y hora se representan mediante valores de caracteres en formatos específicos y se incluyen entre comillas simples. En las tablas siguientes se definen los tipos literales permitidos, el formato y las reglas de conversión para insertar un literal de fecha u hora en una columna de distribución de PDW de SQL Server de tipo datetime, smalldatetime, date, time, datetimeoffset o datetime2.

Tipo de datos datetime

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo datetime. Cualquier cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00:00.000". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato datetime "AAAA-MM-DD hh:mm:ss[.nnn]"

Ejemplo: "2007-05-08 12:35:29.123"
Los dígitos fraccionales que faltan se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08 12:35" se inserta como "2007-05-08 12:35:00.000".
Literal de cadena en formato smalldatetime "AAAA-MM-DD hh:mm"

Ejemplo: "2007-05-08 12:35"
Los segundos y los dígitos fraccionales restantes se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato date "AAAA-MM-DD"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 12:00:00.000 cuando se inserta el valor.
Literal de cadena en formato datetime2 "AAAA-MM-DD hh:mm:ss.nnnnnnn"

Ejemplo: "2007-05-08 12:35:29.1234567"
Los datos de origen no pueden superar los tres dígitos fraccionales. Por ejemplo, se insertará el literal "2007-05-08 12:35:29.123", pero el valor "2007-05-08 12:35:29.1234567" genera un error.

Tipo de datos smalldatetime

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo smalldatetime. Cualquier cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato smalldatetime "YYYY-MM-DD hh:mm" o "YYYY-MM-DD hh:mm:00"

Ejemplo: "2007-05-08 12:00" o "2007-05-08 12:00:00"
Los datos de origen deben tener valores para el año, el mes, la fecha, la hora y el minuto. Los segundos son opcionales y, si están presentes, se deben establecer en el valor 00. Cualquier otro valor genera un código de error.
Literal de cadena en formato date "AAAA-MM-DD"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 0 cuando se inserta el valor.

Tipo de datos date

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo date. Cualquier cadena vacía ('') se convierte en el valor predeterminado "1900-01-01". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato date "AAAA-MM-DD"

Ejemplo: "2007-05-08"
Este es el único formato aceptado.

Tipo de datos time

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo time. Cualquier cadena vacía ('') se convierte en el valor predeterminado "00:00:00.0000". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato time "hh:mm:ss.nnnnnnn"

Ejemplo: "12:35:29.1234567"
Si el origen de datos tiene una precisión menor o igual (número de dígitos fraccionales) que la precisión del tipo de datos time, los datos se rellenan a la derecha con ceros. Por ejemplo, un valor literal "12:35:29.123" se inserta como "12:35:29.1230000".

Un valor que tiene una precisión mayor que el tipo de datos de destino se rechaza.

Tipo de datos datetimeoffset

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo datetimeoffset (n). El formato predeterminado es "AAAA-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm". Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00:00.0000000 +00:00". Las cadenas que contienen solo espacios en blanco (" ") generan un error. El número de dígitos fraccionales depende de la definición de columna. Por ejemplo, una columna definida como datetimeoffset (2) tendrá dos dígitos fraccionales.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato datetime "AAAA-MM-DD hh:mm:ss[.nnn]"

Ejemplo: "2007-05-08 12:35:29.123"
Los dígitos fraccionales que faltan y los valores de desplazamiento se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08 12:35:29.123" se inserta como "2007-05-08 12:35:29.1230000 +00:00".
Literal de cadena en formato smalldatetime "AAAA-MM-DD hh:mm"

Ejemplo: "2007-05-08 12:35"
Los segundos, los dígitos fraccionales restantes y los valores de desplazamiento se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato date "AAAA-MM-DD"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08" se inserta como "2007-05-08 00:00:00.0000000 +00:00".
Literal de cadena en formato datetime2 "AAAA-MM-DD hh:mm:ss.nnnnnnn"

Ejemplo: "2007-05-08 12:35:29.1234567"
Los datos de origen no pueden superar el número especificado de fracciones de segundo en la columna datetimeoffset. Si el origen de datos tiene un número menor o igual de fracciones de segundo, los datos se rellenan a la derecha con ceros. Por ejemplo, si el tipo de datos es datetimeoffset (5), el valor literal "2007-05-08 12:35:29.123 +12:15" se inserta como "12:35:29.12300 +12:15".
Literal de cadena en formato datetimeoffset "AAAA-MM-DD hh:mm:ss.nnnnnnn {+|-} hh:mm"

Ejemplo: "2007-05-08 12:35:29.1234567 +12:15"
Los datos de origen no pueden superar el número especificado de fracciones de segundo en la columna datetimeoffset. Si el origen de datos tiene un número menor o igual de fracciones de segundo, los datos se rellenan a la derecha con ceros. Por ejemplo, si el tipo de datos es datetimeoffset (5), el valor literal "2007-05-08 12:35:29.123 +12:15" se inserta como "12:35:29.12300 +12:15".

Tipo de datos datetime2

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo datetime2 (n). El formato predeterminado es "AAAA-MM-DD hh:mm:ss.nnnnnnn". Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00:00". Las cadenas que contienen solo espacios en blanco (" ") generan un error. El número de dígitos fraccionales depende de la definición de columna. Por ejemplo, una columna definida como datetime2 (2) tendrá dos dígitos fraccionales.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato datetime "AAAA-MM-DD hh:mm:ss[.nnn]"

Ejemplo: "2007-05-08 12:35:29.123"
Las fracciones de segundo son opcionales y se establecen en 0 cuando se inserta el valor.

Un valor que tiene más dígitos fraccionales que el tipo de datos de destino se rechaza.
Literal de cadena en formato smalldatetime "AAAA-MM-DD hh:mm"

Ejemplo: "2007-05-08 12"
Los segundos opcionales y los dígitos fraccionales restantes se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato date "AAAA-MM-DD"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08" se inserta como "2007-05-08 12:00:00.0000000".
Literal de cadena en formato datetime2 "AAAA-MM-DD hh:mm:ss:nnnnnnn"

Ejemplo: "2007-05-08 12:35:29.1234567"
Si el origen de datos contiene componentes de datos y hora que son menores o iguales que el valor especificado en datetime2(n), se insertan los datos; de lo contrario, se genera un error.

Insertar literales en tipos numéricos

En la tabla siguiente se definen los formatos aceptados y las reglas de conversión para insertar un valor literal en una columna de distribución de PDW de SQL Server en la que se usa un tipo numérico.

Tipo de datos bit

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo bit. Una cadena vacía ('') o una cadena que solo contiene espacios en blanco (" ") se convierte en 0.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato entero "nnnnnnnnnn"

Ejemplo: "1" o "321"
Un valor entero con formato de literal de cadena no puede contener un valor negativo. Por ejemplo, el valor "-123" genera un error.

Un valor mayor que 1 se convierte en 1. Por ejemplo, el valor "123" se convierte en 1.
Literal de cadena "TRUE" o "FALSE"

Ejemplo: "true"
El valor "TRUE" se convierte en 1; el valor "FALSE" se convierte en 0.
Literal entero nnnnnnnn

Ejemplo: 1 o 321
Un valor mayor que 1 o menor que 0 se convierte en 1. Por ejemplo, los valores 123 y -123 se convierten en 1.
Literal decimal nnnnn.nnnn

Ejemplo: 1234,5678
Un valor mayor que 1 o menor que 0 se convierte en 1. Por ejemplo, los valores 123,45 y -123,45 se convierten en 1.

tipo de datos decimal

En la tabla siguiente se definen los formatos y reglas aceptados para insertar valores literales en una columna de distribución de tipo decimal (p,s). Las reglas de conversión de datos son las mismas que para SQL Server. Para más información, vea Conversión de tipos de datos en MSDN.

Tipo de literal Formato
Literal de cadena en formato entero "nnnnnnnnnnnn"

Ejemplo: "321312313123"
Literal de cadena en formato decimal "nnnnnn,nnnnn"

Ejemplo: "12344,34455"
Literal entero nnnnnnnnnnnn

Ejemplo: 321312313123
Literal decimal nnnnnn,nnnnn

Ejemplo: "12344,34455"

Tipos de datos float y real

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo float o real. Las reglas de conversión de datos son las mismas que para SQL Server. Para más información, vea Conversión de tipos de datos en MSDN.

Tipo de literal Formato
Literal de cadena en formato entero "nnnnnnnnnnnn"

Ejemplo: "321312313123"
Literal de cadena en formato decimal "nnnnnn,nnnnn"

Ejemplo: "12344,34455"
Literal de cadena en formato de punto flotante "n,nnnnnE+nn"

Ejemplo: "3,12323E+14"
Literal entero nnnnnnnnnnnn

Ejemplo: 321312313123
Literal decimal nnnnnn,nnnnn

Ejemplo: 123344,34455
Literal de punto flotante n,nnnnnE+nn

Ejemplo: 3,12323E+14

Tipos de datos int, bigint, tinyint, smallint

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo int, bigint, tinyint o smallint. El origen de datos no puede superar el intervalo permitido para el tipo de datos especificado. Por ejemplo, el intervalo de tinyint es de 0 a 255, y el intervalo de int es de -2.147.483.648 a 2.147.483.647.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato entero "nnnnnnnnnnnnnn"

Ejemplo: "321312313123"
Ninguno
Literal entero nnnnnnnnnnnnnn

Ejemplo: 321312313123
Ninguno
Literal decimal nnnnnn,nnnnn

Ejemplo: 123344,34455
Los valores situados a la derecha del separador decimal se truncan.

Tipos de datos money y smallmoney

Los valores literales de moneda se representan como números con un separador decimal opcional y un símbolo de moneda como prefijo. El origen de datos no puede superar el intervalo permitido para el tipo de datos especificado. Por ejemplo, el intervalo de smallmoney es de -214.748.3648 a 214.748.3647 y el de money es de -922.337.203.685.477,5808 a 922.337.203.685.477,5807. En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo money o smallmoney.

Tipo de literal Formato Reglas de conversión
Literal de cadena en formato entero "nnnnnnnn"

Ejemplo: "123433"
Los dígitos que faltan después del separador decimal se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "12345" se inserta como "12345,0000".
Literal de cadena en formato decimal "nnnnnn,nnnnn"

Ejemplo: "12344,34455"
Si el número de dígitos después del separador decimal supera los 4, el valor se redondea al valor más cercano. Por ejemplo, el valor "123344,34455" se inserta como "123344,3446".
Literal de cadena en formato money "$nnnnnn,nnnn"

Ejemplo: "$123456,7890"
El símbolo de moneda opcional no se inserta con el valor.

Si el número de dígitos después del separador decimal supera los 4, el valor se redondea al valor más cercano.
Literal entero nnnnnnnn

Ejemplo: 123433
Los dígitos que faltan después del separador decimal se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal 12345 se inserta como 12345,0000.
Literal decimal nnnnnn,nnnnn

Ejemplo: 123344,34455
Si el número de dígitos después del separador decimal supera los 4, el valor se redondea al valor más cercano. Por ejemplo, el valor 123344,34455 se inserta como 123344,3446.
Literal de moneda $nnnnnn,nnnn

Ejemplo: $123456,7890
El símbolo de moneda opcional no se inserta con el valor.

Si el número de dígitos después del separador decimal supera los 4, el valor se redondea al valor más cercano.

Inserción de literales en tipos de cadena

En la tabla siguiente se definen los formatos aceptados y las reglas de conversión para insertar un valor literal en una columna de PDW de SQL Server en la que se usa un tipo de cadena.

Tipos de datos char, varchar, nchar y nvarchar

En la tabla siguiente se definen los formatos y las reglas aceptados para insertar valores literales en una columna de distribución de tipo char, varchar, nchar y nvarchar. La longitud del origen de datos no puede superar el tamaño especificado para el tipo de datos. Si la longitud del origen de datos es menor que el tamaño del tipo de datos char o nchar, los datos se rellenan a la derecha con espacios en blanco para alcanzar el tamaño del tipo de datos.

Tipo de literal Formato Reglas de conversión
Literal de cadena Formato: "cadena de caracteres"

Ejemplo: "abc"
Ninguno
Literal de cadena Unicode Formato: N"cadena de caracteres"

Ejemplo: N"abc"
Ninguno
Literal entero Formato: nnnnnnnnnnn

Ejemplo: 321312313123
Ninguno
Literal decimal Formato: nnnnnn,nnnnnnn

Ejemplo: 12344,34455
Ninguno
Literal de moneda Formato: $nnnnnn,nnnnn

Ejemplo: $123456,99
El símbolo de moneda no se inserta con el valor. Para insertar el símbolo de moneda, inserte el valor como un literal de cadena. Esto coincidirá con el formato de la herramienta dwloader, que procesa cada literal como un literal de cadena.

No se permiten comas.

Si el número de dígitos después del separador decimal es superior a 2, el valor se redondea al valor más cercano. Por ejemplo, el valor 123,946789 se inserta como 123,95.

Solo se permite el estilo predeterminado 0 (sin comas y dos dígitos después del separador decimal) al usar la función CONVERT para insertar literales de divisa.

Vea también

Datos distribuidos
INSERT