Copiar datos entre distintas intercalaciones
Es posible cambiar datos entre columnas Unicode sin problemas y necesidad de realizar conversiones. Sin embargo, los datos movidos entre columnas que contienen datos de caracteres no Unicode deben convertirse de la página de códigos original a la página de códigos de destino. Una página de códigos es un juego de caracteres ordenados de una secuencia de comandos dada en la que un índice numérico, o un valor de punto de código, está asociado a cada uno de los caracteres. Las páginas de códigos admiten juegos de caracteres y distribuciones de teclado utilizados por diferentes configuraciones regionales de Microsoft Windows. Para obtener una lista de las páginas de códigos admitidas, vea Arquitectura de intercalaciones y páginas de códigos.
De manera predeterminada, los datos de caracteres se convierten de la siguiente manera:
Operación | Datos de caracteres convertidos en: |
---|---|
Exportar |
Caracteres de página de códigos OEM |
Importar |
Caracteres de página de códigos ANSI/Microsoft Windows |
La conversión entre las páginas de códigos OEM y ANSI ocasiona la pérdida de los caracteres del juego de caracteres extendidos o de doble byte (DBCS). Para evitar estas conversiones, puede especificar una página de códigos o, en el caso de Microsoft SQL Server 7.0 o posterior, una intercalación.
[!NOTA] Para obtener más información acerca de la transferencia de una base de datos de una intercalación a otra, vea este sitio Web de Microsoft.
En SQL Server 7.0, el almacenamiento físico de las cadenas de caracteres se controla por medio de intercalaciones. Microsoft SQL Server 2005 admite el establecimiento de intercalaciones en cuatro niveles: la instancia de servidor, una base de datos, una columna de tabla y una expresión. Una intercalación de SQL Server especifica tres propiedades:
La página de códigos que se utilizan para almacenar datos de carácter no Unicode.
[!NOTA] Microsoft SQL Server 6.5 y versiones anteriores utilizaban páginas de códigos pero no las almacenaban en intercalaciones.
El orden para utilizar los tipos de datos Unicode (nchar, nvarchar y ntext). Un orden define la secuencia en la que se ordenan los caracteres y la forma en que se evalúan en las operaciones de comparación.
El orden para utilizar los tipos de datos de carácter no Unicode (char, varchar y text).
Para obtener acceso a una introducción a las páginas de códigos y las intercalaciones, vea Opciones de intercalación y soporte internacional. Para obtener información exhaustiva, vea Trabajar con intercalaciones.
Usar una intercalación a nivel de columna
En SQL Server 7.0 y posterior, puede controlar la conversión de los datos especificando la intercalación en la que se almacenan los datos en el campo del archivo de datos de destino, en el caso de una exportación masiva, o la columna de la tabla de destino, en el caso de una operación de importación masiva. Las traducciones necesarias entre la intercalación de los archivos de datos y las intercalaciones de las columnas de las tablas de la base de datos son realizadas a nivel interno por la operación de importación o exportación.
[!NOTA] Para controlar la conversión de datos de una página de códigos a otra en Microsoft SQL Server 6.0 o Microsoft SQL Server 6.5, necesita especificar una página de códigos mediante una opción de página de códigos (el modificador bcp-C o la opción CODEPAGE de Transact-SQL) en el comando. Para obtener más información, vea Usar una página de códigos más adelante en este tema. En el caso de SQL Server 7.0 y posterior, se admite especificar una página de códigos, pero es preferible especificar la intercalación en un archivo de formato.
Las intercalaciones siempre se aplican a las columnas SQLCHAR en operaciones tanto de importación masiva como de exportación masiva. Las especificaciones de intercalación de columna siempre se omiten para las columnas que no tengan SQLCHAR o SQLNCHAR especificados como tipo de datos de host. Las intercalaciones se utilizan para determinar el orden de las columnas SQLCHAR y SQLNCHAR durante las operaciones de importación masiva para las que se hace referencia a las columnas en la sugerencia ORDER.
Para especificar la intercalación, debe utilizar un archivo de formato. Ambos tipos de archivos de formato admiten la especificación de intercalaciones a nivel de columna. Para obtener información sobre el uso de intercalaciones en archivos de formato no XML, vea la siguiente sección, Especificar intercalaciones a nivel de columna en archivos de formato no XML. Para obtener información sobre el uso de intercalaciones en archivos de formato no XML, vea Descripción de los archivos de formato XML.
Especificar intercalaciones a nivel de columna en archivos de formato no XML
La columna final de un archivo de formato no XML (la columna situada en la posición ordinal 8) contiene una especificación de intercalación que define cómo se almacenan los datos de esa columna en el archivo de datos. Las opciones de columna de intercalación son las siguientes:
Opción
Descripción
name
Especifica el nombre de la intercalación que se utiliza para guardar los datos en el archivo de datos. Para obtener una lista de los nombres de intercalación SQL, vea Nombre de intercalación de SQL (Transact-SQL).
RAW
Especifica que los datos están almacenados en la página de códigos especificada en una opción de página de códigos del comando o de la sugerencia BCPFILECP de bcp_control. Si no se especifica ninguna de ellas, la intercalación del archivo de datos es la de la página de códigos OEM del equipo cliente.
Nota:
Para obtener más información sobre las opciones de páginas de códigos, vea "Usar una página de códigos" más adelante en este tema. Para obtener más información sobre la sugerencia BCPFILECP, vea bcp_control.
""
Tiene el mismo significado que RAW.
Ejemplos
En el siguiente ejemplo se muestra un archivo de formato no XML con intercalaciones de columna especificadas para los campos 2 y 3. La información sobre la intercalación se muestra en negrita.
9.0
4
1 SQLCHAR 0 7 "\t" 1 DepartmentID ""
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "\t" 3 GroupName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 24 "\r\n" 4 ModifiedDate ""
[!NOTA] El archivo de formato anterior corresponde a la tabla HumanResources.Department de la base de datos de ejemplo AdventureWorks, que tiene cuatro columnas: DepartmentID, Name, GroupName y ModifiedDate. Para obtener más información acerca de la tabla, vea Tabla Department (AdventureWorks).
Para obtener más información sobre los archivos de formato no XML, vea Descripción de los archivos de formato no XML.
Usar una página de códigos
Para controlar la conversión de datos de una página de códigos a otra en SQL Server 6.0 o SQL Server 6.5, necesita especificar una página de códigos en el comando.
[!NOTA] Para controlar la conversión de datos en SQL Server 7.0 y posterior, Microsoft recomienda utilizar un archivo de formato para especificar intercalaciones a nivel de columna para una operación de exportación o importación masiva. Para obtener más información, vea "Usar una intercalación a nivel de columna" en la sección anterior.
La sintaxis necesaria para especificar una página de códigos es la siguiente:
- Para especificar una página de códigos en un comando bcp, utilice el modificador -C:
-C { ACP | OEM | RAW | code_page } - Para especificar una página de códigos en una instrucción BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), utilice la opción CODEPAGE:
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Tanto el modificador -C como la opción CODEPAGE aceptan los siguientes valores para la página de códigos.
Valor de página de códigos | Descripción |
---|---|
ACP |
Durante una operación de importación, especifica que los campos de datos del tipo de datos char, varchar o text se conviertan de la página de códigos ANSI/Windows (ISO 1252) en la página de códigos de SQL Server. Durante una operación de exportación, especifica que bcp convierta estas columnas de la página de códigos de SQL Server en la página de códigos ANSI/Windows. |
OEM (valor predeterminado) |
Durante una operación de importación, especifica que los campos de datos del tipo de datos char, varchar o text se conviertan de la página de códigos OEM del sistema en la página de códigos de SQL Server. Durante una operación de exportación, especifica que bcp convierta estas columnas de la página de códigos de SQL Server en la página de códigos OEM del sistema. |
RAW |
No se realiza ninguna conversión entre páginas de códigos. Ésta es la opción más rápida. |
code_page |
Número específico de una página de códigos (por ejemplo, |
Ejemplos
Los siguientes ejemplos utilizan la tabla HumanResources.myTeam en la base de datos AdventureWorks. Antes de poder ejecutar los ejemplos, debe crear esta tabla. Para obtener información sobre la tabla y cómo crearla, vea Crear la tabla HumanResources.myTeam.
[!NOTA] Antes de probar el siguiente ejemplo, debe eliminar las filas existentes de la tabla myTeam para evitar conflictos de clave principal.
A. Usar una página de códigos con bcp
Este ejemplo utiliza bcp para exportar de manera masiva los datos de la tabla HumanResources.myTeam
de la base de datos AdventureWorks
al archivo de datos myTeam850.txt
; utilice la página de códigos 850
. En el símbolo del sistema de Windows, escriba:
bcp AdventureWorks.HumanResources.myTeam out myTeam850.txt -c -C850 -T
B. Usar una página de códigos con BULK INSERT
En este ejemplo se utiliza BULK INSERT para importar de manera masiva myTeam850.txt
, creado en el ejemplo bcp precedente, en la tabla AdventureWorks``HumanResources.myTeam
.
Desde una herramienta de consulta, por ejemplo el Editor de consultas de SQL Server Management Studio, ejecute:
USE AdventureWorks
GO
DELETE HumanResources.myTeam
GO
BULK INSERT HumanResources.myTeam
FROM 'C:\myTeam850.txt'
WITH (CODEPAGE = 850);
GO
Exportación masiva de datos entre diferentes intercalaciones
En una operación de exportación masiva, la especificación de intercalación controla la página de códigos utilizada para almacenar los datos de caracteres en el archivo de datos. Se aplica a:
- Todas las columnas de un archivo de datos de formato de caracteres.
- Todas las columnas de un archivo en modo nativo en el que se especifique SQLCHAR como el tipo de datos del archivo de host.
- Caracteres SQLCHAR cuyos valores son mayores que 127 o menores que 32.
Las intercalaciones se aplican a los caracteres cuyos valores están comprendidos entre 32 y 127, pero todas las páginas de códigos asignan los mismos caracteres a los valores comprendidos entre 32 y 127, por lo que aplicar diferentes intercalaciones no tiene ningún efecto.
Las reglas para determinar qué intercalación o página de códigos se utiliza en una operación de exportación masiva son las siguientes:
Si se especifica la intercalación de columna en un archivo de formato o utilizando la función bcp_setcolfmt de ODBC (bcp_setcolfmt), los datos de caracteres se almacenan utilizando la página de códigos ANSI asociada a la intercalación.
Si no se especifica ninguna intercalación de columna, pero una opción de página de códigos del comando o la sugerencia BCPFILECP de bcp_control especificó una página de códigos, todos los datos SQLCHAR de las columnas que no tengan especificación de intercalación se almacenan utilizando la página de códigos especificada.
[!NOTA] Para obtener información sobre las opciones de páginas de códigos, vea "Usar una página de códigos" anteriormente en este tema. Para obtener más información sobre la sugerencia BCPFILECP, vea bcp_control.
Si no especifica una intercalación o una página de códigos, los datos SQLCHAR se almacenan utilizando la página de códigos OEM del equipo cliente.
[!NOTA] Los archivos de datos no almacenan ninguna información sobre la intercalación/página de códigos.
Importación masiva de datos entre diferentes intercalaciones
En una operación de importación masiva, la interpretación de la página de códigos se aplica a las columnas almacenadas como SQLCHAR de formato de caracteres en el archivo de datos. En un archivo de datos de formato de caracteres, todas las columnas se almacenan como SQLCHAR. Puesto que los archivos de datos no almacenan información sobre la intercalación/página de códigos, en el caso de una operación de importación masiva debe suministrar información sobre la intercalación/página de códigos de los campos de datos.
Las reglas para determinar qué intercalación o página de códigos se utiliza en una operación de importación masiva son las siguientes:
Si especifica la intercalación de columna en un archivo de formato o utilizando la función bcp_setcolfmt de ODBC (bcp_setcolfmt), los datos SQLCHAR de un archivo de datos se interpretan utilizando la página de códigos ANSI asociada a la intercalación de columna especificada. Asegúrese de que las especificaciones de intercalación coinciden con las intercalaciones del archivo de datos.
Si no se especifica una intercalación de columna, pero sí se especifica una página de códigos mediante la opción de página de códigos del comando o la sugerencia BCPFILECP de bcp_control, los datos SQLCHAR se interpretan utilizando la página de códigos especificada.
[!NOTA] Para obtener información sobre las opciones de páginas de códigos, vea Usar una página de códigos anteriormente en este tema. Para obtener más información sobre la sugerencia BCPFILECP, vea bcp_control.
Si no especifica ninguna intercalación o página de códigos, los datos de las columnas SQLCHAR se interpretan utilizando la página de códigos OEM del equipo cliente.
En una operación de importación masiva, la especificación de intercalación controla lo siguiente:
- La forma en que la operación intenta interpretar la página de códigos de las columnas SQLCHAR en el archivo de datos.
- Cómo bcp o BULK INSERT aplica la sugerencia ORDER, si se especifica.
Si utiliza la sugerencia ORDER, la operación de importación masiva utiliza intercalaciones para interpretar correctamente la sugerencia ORDER. Esta sugerencia se aplica tanto a las columnas SQLCHAR como SQLNCHAR. Los datos de las columnas a las que hace referencia una sugerencia ORDER deben tener la secuencia definida por la intercalación asignada a esas columnas. Para obtener más información, vea Controlar el criterio de ordenación en las importaciones masivas de datos.
Vea también
Conceptos
Usar el formato de caracteres Unicode para importar o exportar datos
Usar el formato nativo Unicode para importar o exportar datos
Trabajar con intercalaciones
Otros recursos
bcp_control
bcp (utilidad)
bcp_setcolfmt
BULK INSERT (Transact-SQL)
Archivos de formato para importar o exportar datos
Consideraciones internacionales para bases de datos y aplicaciones con motor de base de datos
OPENROWSET (Transact-SQL)