Cambiar la recopilación de bases de datos de SQL Server

Puede llegar un momento en el que necesite modificar su base de datos para usar una recopilación diferente.

Puede hacer esto utilizando el siguiente fragmento de código:

USE master;GOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS ;GO--Verify the collation setting.SELECT name, collation_nameFROM sys.databasesWHERE name = N'';GO

Al ejecutar el fragmento de código anterior, puede encontrarse con el siguiente error:

La base de datos no se pudo bloquear exclusivamente para realizar la operación

Este error se produce cuando la base de datos está en modo multiusuario o cuando hay objetos que hacen referencia a la base de datos.

Para superar este error, debe realizar los siguientes pasos:

  1. Establezca la base de datos en modo de usuario único;
  2. Realice los cambios necesarios en su base de datos, en este caso cambie la intercalación;
  3. Vuelva a establecer la base de datos en modo multiusuario.

Por lo tanto, el fragmento de código anterior se puede actualizar al siguiente:

USE master;GO-- Set to single-user modeALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGO -- change collationALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GO -- Set to multi-user modeALTER DATABASE SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO --Verify the collation setting. SELECT name, collation_name FROM sys.databases WHERE name = N'MyOptionsTest'; GO

El proceso anterior se puede usar si acaba de crear una nueva base de datos, sin datos dentro, sin establecer la recopilación de base de datos deseada.

Cambiar la intercalación a columnas de tabla

En su base de datos puede haber columnas de tabla con diferentes intercalaciones, a saber, columnas de tabla de tipos char, varchar, text, nchar, nvarchar y ntext. Para listar todas las columnas de tabla con sus intercalaciones actuales, puede ejecutar la siguiente consulta:

SELECT t.name, c.name, c.collation_nameFROM sys.columns c INNER JOIN sys.tables t ON t.object_id = c.object_idWHERE c.object_id IN (SELECT object_id FROM sys.objects WHERE type = 'U') AND c.collation_name != 'NULL'ORDER BY t.name, c.name

Antes de realizar cambios en las intercalaciones de estas columnas, debe verificar si los cambios generarán problemas a las aplicaciones.

Para modificar una intercalación de columnas a una nueva, puede ejecutar la siguiente consulta:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

En caso de error, asegúrese de que las restricciones de referencia y los índices se eliminen; puede recrearlos después de que se haya cambiado la intercalación.

Cambiar la recopilación y los Datos existentes

¿Qué pasa con sus datos existentes? Para asegurarse de que los datos existentes se puedan recuperar después de cambiar la recopilación, debe seguir los pasos a continuación:

  1. exporte datos antiguos de cada tabla, ya sea mediante el asistente de importación y exportación de datos de SQL Server o bcp;
  2. suelte y vuelva a crear las tablas; y
  3. importe datos exportados anteriormente.

En el siguiente ejemplo crearemos una base de datos con intercalación LATIN1_GENERAL_CI_AI, agregaremos una tabla de Productos con un nombre de columna (nvarchar (50)) e insertaremos algunos datos en griego.

CREATE DATABASE COLLATE LATIN1_GENERAL_CI_AI;-- -- Create Products table and add some dataUSE GOCREATE TABLE .( (50) NULL) ON GOinsert into dbo.Products (name) values (N'Προϊόν 1');insert into dbo.Products (name) values (N'Προϊόν 2');insert into dbo.Products (name) values (N'Προϊόν 3');insert into dbo.Products (name) values (N'Προϊόν 4');insert into dbo.Products (name) values (N'Προϊόν 5');

Buscando todos los productos que comienzan con «ΠροϊΌν» (palabra griega para Producto), obtenemos 5 resultados:

SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5

Paso 1. Exportar datos

Exportemos datos en la tabla de productos mediante bcp, que significa utilidad de programa de copia masiva (bcp) y copia masiva de datos entre una instancia de Microsoft SQL Server y un archivo de datos en un formato especificado por el usuario. Esta utilidad se puede utilizar para importar un gran número de filas nuevas en tablas de SQL Server o para exportar datos de tablas a un archivo adata. Para hacerlo, necesitamos el siguiente comando:

bcp CollationTest.dbo.Products out Products.txt -c -T

donde-crealiza la operación con un tipo de datos de caracteres y-Tespecifica que la utilidad bcp se conecta a SQL Server con una conexión de confianza mediante seguridad integrada.

Paso 2. Cambiar la intercalación de la base de datos

En el siguiente paso cambiaremos la intercalación de la base de datos a GREEK_CI_AI, con la siguiente instrucción:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

Paso 3. Suelte y Vuelva a crear la tabla de productos

USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO

Paso 4. Importar datos exportados previamente

Para hacerlo, usaremos de nuevo la utilidad bcp, pero en lugar del parámetro out usaremos el parámetro in :

bcp CollationTest.dbo.Products in Products.txt -c -T

Deja una respuesta

Tu dirección de correo electrónico no será publicada.