Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede invalidar la intercalación de base de datos para char, los datos varchar, text, nchar, nvarchar y ntext especificando una intercalación diferente para una columna específica de una tabla y utilizando uno de los siguientes elementos:
La cláusula COLLATE de CREATE TABLE y ALTER TABLE. Por ejemplo:
CREATE TABLE dbo.MyTable (PrimaryKey int PRIMARY KEY, CharCol varchar(10) COLLATE French_CI_AS NOT NULL ); GO ALTER TABLE dbo.MyTable ALTER COLUMN CharCol varchar(10)COLLATE Latin1_General_CI_AS NOT NULL; GOSQL Server Management Studio. Para obtener más información, Compatibilidad con Intercalación y Unicode.
Uso de la
Column.Collationpropiedad en Objetos de administración de SQL Server (SMO).
No puede cambiar la intercalación de una columna a la que hace referencia actualmente cualquiera de los siguientes elementos:
Una columna calculada
Un índice
Estadísticas de distribución, generadas automáticamente o por la instrucción CREATE STATISTICS
Una restricción CHECK
Una restricción FOREIGN KEY
Cuando se trabaja con tempdb, la cláusula COLLATE incluye una opción database_default para especificar que una columna de una tabla temporal usa la intercalación por defecto de la base de datos de usuario actual para la conexión en lugar de la intercalación de tempdb.
Intercalaciones y columnas de texto
Puede insertar o actualizar valores en una text columna cuya intercalación es diferente de la página de códigos de la intercalación predeterminada de la base de datos. SQL Server convierte automáticamente los valores a la colación definida de la columna.
Intercalaciones y tempdb
La base de datos tempdb se compila cada vez que se inicia SQL Server y tiene la misma intercalación predeterminada que la base de datos del modelo . Normalmente, esto es lo mismo que la intercalación predeterminada de la instancia. Si crea una base de datos de usuario y especifica una intercalación predeterminada diferente al modelo, la base de datos de usuario tiene una intercalación predeterminada diferente a tempdb. Todos los procedimientos almacenados temporales o las tablas temporales se crean y almacenan en tempdb. Esto significa que todas las columnas implícitas de tablas temporales y todas las constantes, variables y parámetros predeterminados coercibles en procedimientos almacenados temporales tienen intercalaciones diferentes a las de los objetos comparables creados en tablas permanentes y procedimientos almacenados.
Esto podría provocar problemas con un desajuste en los ordenamientos entre las bases de datos definidas por el usuario y los objetos de base de datos del sistema. Por ejemplo, una instancia de SQL Server usa la intercalación Latin1_General_CS_AS y ejecuta las siguientes instrucciones:
CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
En este sistema, la base de datos tempdb usa la intercalación Latin1_General_CS_AS con página de códigos 1252, y TestDB y TestPermTab.Col1 usan la intercalación Estonian_CS_AS con página de códigos 1257. Por ejemplo:
USE TestDB;
GO
-- Create a temporary table with the same column declarations
-- as TestPermTab
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
INSERT INTO #TestTempTab
SELECT * FROM TestPermTab;
GO
Con el ejemplo anterior, la base de datos tempdb usa la intercalación Latin1_General_CS_AS, y TestDB y TestTab.Col1 usan la intercalación Estonian_CS_AS. Por ejemplo:
SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;
Dado que tempdb usa la intercalación de servidor predeterminada y TestPermTab.Col1 usa otra intercalación, SQL Server devuelve este error: "No se puede resolver el conflicto de intercalación entre "Latin1_General_CI_AS_KS_WS" y "Estonian_CS_AS" en igual a la operación".
Para evitar el error, puede usar una de las siguientes alternativas:
Especifique que la columna de tabla temporal use la intercalación predeterminada de la base de datos de usuario, no tempdb. Esto permite que la tabla temporal funcione con tablas con formato similar en varias bases de datos, si es necesario para el sistema.
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE database_default );Especifique la intercalación correcta para la columna
#TestTempTab.CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE Estonian_CS_AS );
Véase también
Establecer o cambiar la intercalación del servidor
Establecer o cambiar la intercalación de base de datos
Compatibilidad con la intercalación y Unicode