Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Du kan åsidosätta databassortering för tecken, varchar, text, nchar, nvarcharoch ntext data genom att ange en annan sortering för en viss kolumn i en tabell och med något av följande:
COLLATE-satsen i CREATE TABLE och ALTER TABLE, enligt exemplen här nedan.
Konvertering på plats. Överväg en av de befintliga tabellerna som definieras nedan:
-- NVARCHAR column is encoded in UTF-16 because a supplementary character enabled collation is used CREATE TABLE dbo.MyTable (CharCol NVARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC); -- VARCHAR column is encoded the Latin code page and therefore is not Unicode capable CREATE TABLE dbo.MyTable (CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI);
Om du vill konvertera kolumnen på plats för att använda UTF-8 kör du en
ALTER COLUMN
-instruktion som anger den datatyp som krävs och en UTF-8-aktiverad sortering:ALTER TABLE dbo.MyTable ALTER COLUMN CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8
Den här metoden är lätt att implementera, men det är en möjligen blockerande åtgärd som kan bli ett problem för stora tabeller och upptagna program.
Kopiera och ersätt. Överväg en av de befintliga tabellerna som definieras nedan:
-- NVARCHAR column is encoded in UTF-16 because a supplementary character enabled collation is used CREATE TABLE dbo.MyTable (CharCol NVARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC); GO -- VARCHAR column is encoded using the Latin code page and therefore is not Unicode capable CREATE TABLE dbo.MyTable (CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI); GO
Om du vill konvertera kolumnen till att använda UTF-8 kopierar du data till en ny tabell där målkolumnen redan är den datatyp som krävs och en UTF-8-aktiverad sortering och ersätter sedan den gamla tabellen:
CREATE TABLE dbo.MyTableNew (CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); GO INSERT INTO dbo.MyTableNew SELECT * FROM dbo.MyTable; GO DROP TABLE dbo.MyTable; GO EXEC sp_rename 'dbo.MyTableNew', 'dbo.MyTable'; GO
Den här metoden är mycket snabbare än konvertering på plats, men det krävs mer planering för att hantera komplexa scheman med många beroenden (FK:er, PK:er, utlösare, DF:er) och synkronisering av tabellens svans (om databasen används).
Mer information finns i Collation och Unicode Support.
SQL Server Management Studio. Mer information finns i Ändra kolumner (databasmotor).
Använda egenskapen Column.Collation i SQL Server Management Objects (SMO).
Du kan inte ändra sortering av en kolumn som för närvarande refereras till av något av följande:
- En beräknad kolumn
- Ett index
- Distributionsstatistik, antingen genererad automatiskt eller av
CREATE STATISTICS
-instruktionen - En CHECK-begränsning
- Referensnyckelbegränsning
När du arbetar med tempdbinnehåller satsen COLLATE ett database_default alternativ för att ange att en kolumn i en tillfällig tabell använder sorteringsstandarden för den aktuella användardatabasen för anslutningen i stället för sortering av tempdb.
Sorteringsordningar och textkolumner
Du kan infoga eller uppdatera värden i en text kolumn vars sortering skiljer sig från kodsidan för databasens standardsortering. SQL Server konverterar implicit värdena till sortering av kolumnen.
Kollationer och tempdb
Den tempdb- databasen skapas varje gång SQL Server startas och har samma standardsortering som modell databas. Detta är vanligtvis samma som standardsorteringsordningen för instansen. Om du skapar en användardatabas och anger en annan standardsortering än modellhar användardatabasen en annan standardsortering än tempdb. Alla temporära lagrade procedurer eller temporära tabeller skapas och lagras i tempdb. Det innebär att alla implicita kolumner i temporära tabeller och alla konstanter, variabler och parametrar i temporära lagrade procedurer har sorteringar som skiljer sig från jämförbara objekt som skapats i permanenta tabeller och lagrade procedurer.
Detta kan leda till problem med matchningsfel i sortering mellan användardefinierade databaser och systemdatabasobjekt. En instans av SQL Server använder till exempel Latin1_General_CS_AS sortering och du kör följande instruktioner:
CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
I det här systemet använder tempdb-databasen Latin1_General_CS_AS-collation med kodsidan 1252, och TestDB
och TestPermTab.Col1
använder Estonian_CS_AS
-collation med kodsidan 1257. Till exempel:
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
I föregående exempel använder tempdb-databasen Latin1_General_CS_AS sortering, och TestDB
och TestTab.Col1
använder Estonian_CS_AS
sortering. Till exempel:
SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;
Eftersom tempdb använder standardserversortering och TestPermTab.Col1
använder en annan sortering returnerar SQL Server följande fel: "Det går inte att lösa sorteringskonflikten mellan 'Latin1_General_CI_AS_KS_WS' och 'Estonian_CS_AS' i 'lika med'-operationen."
Om du vill förhindra felet kan du använda något av följande alternativ:
Ange att den tillfälliga tabellkolumnen använder standardsortering av användardatabasen, inte tempdb. Detta gör att den tillfälliga tabellen kan arbeta med liknande formaterade tabeller i flera databaser, om det krävs av systemet.
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE database_default );
Ange rätt sortering för kolumnen
#TestTempTab
:CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE Estonian_CS_AS );
Se även
Ange eller ändra serverkollationen
ange eller ändra databassortering
Sortering och Unicode-stöd