Configurar o cambiar la intercalación de base de datos

Se aplica a: SQL Server Azure SQL Managed Instance

En este artículo se describe cómo establecer o cambiar la intercalación de base de datos usando SQL Server Management Studio (SSMS) o Transact-SQL.

Si no se especifica ninguna intercalación de base de datos, se utiliza la intercalación del servidor.

Recomendaciones

Puede encontrar los nombres de intercalación admitidos en Nombre de intercalación de Windows y Nombre de intercalación de SQL Server, o bien puede usar la función del sistema sys.fn_helpcollations.

Al modificar la intercalación de la base de datos también se cambian los siguientes elementos:

  • Todas las columnas char, varchar, text, nchar, nvarcharo ntext de las tablas del sistema se cambian a la nueva intercalación.

  • Todos los valores devueltos escalares y parámetros char, varchar, text, nchar, nvarcharo ntext existentes para los procedimientos almacenados y las funciones definidas por el usuario se cambian a la nueva intercalación.

  • Los tipos de datos del sistema char, varchar, text, nchar, nvarcharo ntext y todos los tipos de datos definidos por el usuario basados en estos tipos de datos del sistema se cambian a la nueva intercalación predeterminada.

Para cambiar la intercalación de cualquier objeto nuevo creado en una base de datos de usuario, utilice la cláusula COLLATE de la instrucción ALTER DATABASE. Esta instrucción no modifica la intercalación de las columnas de ninguna de las tablas definidas por el usuario existentes. Para modificarlas, use la cláusula COLLATE de ALTER TABLE.

Permisos

Para crear una nueva base de datos, necesita el permiso CREATE DATABASE en la base de datos master, o bien requiere el permiso CREATE ANY DATABASE o ALTER ANY DATABASE.

Para cambiar la intercalación de una base de datos existente, requiere el permiso ALTER en la base de datos.

Configurar o cambiar la intercalación de base de datos

Puede establecer o cambiar la intercalación de base de datos usando SQL Server Management Studio (SSMS) o Transact-SQL (T-SQL).

Puede especificar la intercalación de una nueva base de datos o actualizar la intercalación de una base de datos existente mediante SQL Server Management Studio (SSMS).

En SQL Server Management Studio, abra el Explorador de objetos, conéctese a una instancia del Motor de base de datos de SQL Server, expándala y, después, expanda Bases de datos:

  • Para una nueva base de datos: haga clic con el botón derecho en Bases de datos y a continuación seleccione Nueva base de datos. Si no quiere la intercalación predeterminada, seleccione la página Opciones y elija una intercalación en la lista desplegable Intercalación.
  • Para una base de datos existente: haga clic con el botón derecho en la base de datos que desee y seleccione Propiedades. Seleccione la página Opciones y, después, seleccione una intercalación en la lista desplegable Intercalación.

Datos después de cambiar la intercalación

Importante

El hecho de cambiar la intercalación de una base de datos o columnas individuales no modifica los datos subyacentes ya almacenados en tablas existentes. A menos que la aplicación controle explícitamente la conversión de datos y la comparación entre las distintas intercalaciones, se recomienda trasladar los datos existentes en la base de datos a la última intercalación. Esto elimina el riesgo de que las aplicaciones puedan modificar incorrectamente los datos, lo que puede causar resultados erróneos o una pérdida de datos silenciosa.

Si se cambia una intercalación de base de datos, solo las tablas nuevas heredarán la última intercalación de base de datos de forma predeterminada. Hay varias alternativas para convertir los datos existentes de la última intercalación:

  • Convierta los datos en contexto. Para convertir la intercalación de una columna en una tabla existente, consulte Establecer o cambiar la intercalación de columnas. Es fácil implementar esta operación, pero puede convertirse en un problema de bloqueo en el caso de las tablas grandes y las aplicaciones ocupadas. Vea el ejemplo siguiente de una conversión en contexto de la columna MyString en una nueva intercalación:

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • Copie datos en tablas nuevas que utilicen la última intercalación y reemplace las tablas originales de la misma base de datos. Cree una nueva tabla en la base de datos actual que herede la intercalación de la base de datos y copie los datos entre la tabla anterior y la nueva. Ahora, quite la tabla original y cambie el nombre de la nueva por el nombre de la original. Esta operación es más rápida que una conversión en contexto, pero puede convertirse en un desafío al administrar esquemas complejos con dependencias como las restricciones de claves externas, las restricciones de claves principales y los desencadenadores. En caso de que las aplicaciones sigan cambiando los datos, también requeriría una sincronización de datos final entre la tabla original y la nueva antes del último cierre. Vea el ejemplo siguiente de una conversión de "copiar y reemplazar" de la columna MyString en una nueva intercalación:

    CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8);
    
    INSERT INTO dbo.MyTable2
    SELECT * FROM dbo.MyTable;
    
    DROP TABLE dbo.MyTable;
    
    EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
    
  • Copie los datos en una nueva base de datos que use la última intercalación y reemplace la base de datos original. Crea una nueva base de datos con la nueva intercalación y transfiere los datos de la base de datos original por medio de herramientas como servicios de integración o el asistente para importación y exportación de SQL Server Management Studio. Este es un enfoque más sencillo en el caso de esquemas complejos. En caso de que las aplicaciones sigan cambiando los datos, también requeriría una sincronización de datos final entre la tabla original y la nueva base de datos antes del último cierre.

Limitaciones

  • Las intercalaciones exclusivas de Unicode de Windows solo se pueden usar con la cláusula COLLATE para aplicar intercalaciones a los tipos de datos nchar, nvarchar y ntext de nivel de columna y de nivel de datos de expresión. No se pueden utilizar con la cláusula COLLATE para cambiar la intercalación de una instancia de base de datos o de servidor.

  • Si la intercalación especificada o la intercalación que usa el objeto al que se hace referencia utiliza una página de códigos no admitida en Windows, el Motor de base de datos muestra un error.

  • La intercalación de nivel de servidor en Azure SQL Managed Instance se puede especificar al crear la instancia y no se puede cambiar posteriormente. Obtenga más información en Configuración o cambio de la intercalación del servidor.

Importante

La instrucción ALTER DATABASE COLLATE no se admite en Azure SQL Database. Especifica la intercalación de base de datos y la intercalación de catálogo en el momento de CREATE DATABASE.