it-swarm.dev

Jak zmienić sortowanie programu SQL Server

Jak mogę zmienić domyślne sortowanie SQL Server 2008 R2 Express dla całego serwera i konkretnej bazy danych?

Czy można to zrobić za pomocą interfejsu wizualnego SQL Server Management Studio? W oknie Właściwości serwera (oraz w odpowiednim oknie Właściwości bazy danych) ta właściwość nie jest dostępna do edycji.

27
rem

Tak.

Możesz zmienić domyślne sortowanie instancji ekspresowej SQL Server 2008 R2 i poszczególnych baz danych, ale jest to złożone zadanie.

Niestety nie ma opcji wizualnej, aby to zrobić za pośrednictwem SSMS.

SQL Server 2008 obsługuje ustawianie sortowania na następujących poziomach:

  • Serwer

  • Baza danych

  • Kolumna

  • Wyrażenie

Domyślne ustawienia instalacji są określone przez ustawienia regionalne systemu Windows. Sortowanie na poziomie serwera można zmienić podczas instalacji lub przez zmianę ustawień regionalnych systemu Windows przed instalacją. więcej ...

stawianie i zmiana sortowania serwerów - SQL Server 2008

  • Upewnij się, że masz wszystkie informacje lub skrypty potrzebne do odtworzenia baz danych użytkowników i wszystkich zawartych w nich obiektów.

  • Wyeksportuj wszystkie dane za pomocą narzędzia takiego jak Narzędzie bcp. Aby uzyskać więcej informacji, zobacz Importowanie i eksportowanie danych masowych.

  • Usuń wszystkie bazy danych użytkowników.

  • Odbuduj główną bazę danych określając nowe sortowanie we właściwości SQLCOLLATION polecenia setup

  • Utwórz wszystkie bazy danych i wszystkie zawarte w nich obiekty.

  • Zaimportuj wszystkie swoje dane.

stawianie i zmiana sortowania bazy danych - SQL Server 2008

  • Ustaw opcję COLLATION w CREATE DATABASE instrukcja podczas tworzenia nowej bazy danych.
  • Podobnie ustaw opcje COLLATION w ALTER DATABASE instrukcja zmiany sortowania istniejącej bazy danych.

    ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

stawianie i zmiana sortowania kolumn

  • Niektóre sortowania kolumn pozostaną takie same, nawet po zmianie sortowania bazy danych. W takim przypadku musisz zmodyfikować zestawienie poszczególnych kolumn.
25
CoderHawk

Upewnij się, że naprawdę chcesz „upuścić” bazy danych użytkowników, jak wspomniano w odpowiedzi powyżej. Możesz po prostu „odłączyć” bazy danych. A tak naprawdę, nie możesz nic zrobić, ponieważ przebudowanie mastera skutecznie usuwa wszelkie linki do baz danych użytkowników. Są chwile, kiedy bazy danych są tworzone w pożądanym sortowaniu, ale serwer nie. W takim przypadku nie byłoby konieczne odzyskiwanie wszystkich baz danych użytkowników z kopii zapasowych.

6
AndrewSQL

Zrobiłem coś takiego i zadziałało, ale musisz pamiętać o indeksach wskazujących na typ danych, ponieważ tekst/varchar/nvarchar musi zostać usunięty, uruchom skrypt, a następnie utwórz indeksy.

USE YourDataBase
GO

DECLARE @Table_Name NVARCHAR(100)
SET @Table_Name = NULL--- THIS IS THE TableName that you want to change its collation columns

--- if null will set to all tables

DECLARE @TempTable AS TABLE
(
ID INT IDENTITY
,TableName NVARCHAR(100)
,ColumnName NVARCHAR(100)
,TypeName NVARCHAR(100)
,Max_length INT
,Collation_Name NVARCHAR(100)
,EnterDtm DATETIME DEFAULT GETDATE()
)
DECLARE @NewCollation NVARCHAR(100)
SET @NewCollation = 'Latin1_General_CI_AS' --- THIS IS THE COLLATION NAME THAT YOU WANT TO CHANGE

INSERT INTO @TempTable(TableName,ColumnName,TypeName,Max_length,Collation_Name)
SELECT 
QUOTENAME(SCHEMA_NAME(tables.schema_id)) + '.' + QUOTENAME(tables.name) AS TableName
,all_columns.name AS ColumnName
,type_name(all_columns.user_type_id)
,all_columns.max_length
,all_columns.collation_name  
from sys.all_columns INNER JOIN sys.tables ON
tables.object_id = all_columns.object_id
AND collation_name IS NOT NULL
AND all_columns.collation_name != @NewCollation
WHERE tables.object_id = ISNULL(object_id(@Table_Name),all_columns.object_id)


DECLARE @TableID SMALLINT
SET @TableID = (SELECT MIN(ID) FROM @TempTable)

DECLARE @Query NVARCHAR(1000),@TableName NVARCHAR(100),@ColumnName NVARCHAR(100),@TypeName NVARCHAR(100)
,@Size INT

WHILE @TableID IS NOT NULL
BEGIN
    SET @TableName = (SELECT TableName FROM @TempTable WHERE ID = @TableID)
    SET @ColumnName = (SELECT QUOTENAME(ColumnName) FROM @TempTable WHERE ID = @TableID)
    SET @TypeName = (SELECT TypeName FROM @TempTable WHERE ID = @TableID)
    SET @Size = (SELECT Max_length FROM @TempTable WHERE ID = @TableID) 

    SET @Query='ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @TypeName+ ISNULL ('(' +CAST(@Size AS VARCHAR(200))+')', '') +' COLLATE '+ @NewCollation  
    PRINT (@Query)

    SET @TableID = (SELECT MIN(ID) FROM @TempTable WHERE ID > @TableID)
END 

to jest moja pierwsza odpowiedź, ułaskaw mój bałagan

5
Jeffry