it-swarm.asia

Bagaimana mengubah susunan SQL Server

Bagaimana saya bisa mengubah SQL Server 2008 R2 Express Default Collation untuk seluruh server dan database tertentu?

Apakah ada cara untuk melakukannya menggunakan antarmuka visual dari SQL Server Management Studio? Di jendela Properti Server (dan di jendela Properti Database yang sesuai), properti ini tidak tersedia untuk diedit.

27
rem

Iya.

Anda dapat mengubah susunan default contoh SQL Server 2008 R2 express dan database individu, tetapi itu adalah tugas yang kompleks.

Sayangnya, tidak ada opsi visual untuk melakukannya melalui SSMS.

SQL Server 2008 mendukung pengaturan pengaturan pada level berikut:

  • Server

  • Basis data

  • Kolom

  • Ekspresi

Pengaturan instalasi default ditentukan oleh lokal sistem Windows. Susunan tingkat server dapat diubah selama pengaturan, atau dengan mengubah lokal sistem Windows sebelum instalasi. selengkapnya ...

Mengatur dan Mengubah Collation Server - SQL Server 2008

  • Pastikan Anda memiliki semua informasi atau skrip yang diperlukan untuk membuat kembali basis data pengguna Anda dan semua objek di dalamnya.

  • Ekspor semua data Anda menggunakan alat seperti bcp Utility. Untuk informasi lebih lanjut, lihat Mengimpor dan Mengekspor Data Massal.

  • Jatuhkan semua basis data pengguna.

  • Membangun kembali database master menentukan pemeriksaan baru di properti SQLCOLLATION dari perintah pengaturan

  • Buat semua database dan semua objek di dalamnya.

  • Impor semua data Anda.

Mengatur dan Mengubah Susunan Basis Data - SQL Server 2008

  • Atur opsi COLLATION di CREATE DATABASE pernyataan saat membuat database baru.
  • Demikian pula, atur opsi COLLATION di ALTER DATABASE pernyataan untuk mengubah susunan basis data yang ada.

    ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

Mengatur dan Mengubah Kolom Kolasi

  • Beberapa susunan kolom akan tetap sama bahkan setelah Anda mengubah susunan basis data. Dalam hal ini, Anda harus memodifikasi susunan kolom individual.
25
CoderHawk

Pastikan Anda benar-benar ingin "menjatuhkan" basis data pengguna seperti disebutkan dalam jawaban di atas. Anda mungkin hanya ingin "melepaskan" basis data. Atau sungguh, Anda tidak dapat melakukan apa pun karena membangun kembali master secara efektif menghapus tautan apa pun ke basis data pengguna. Ada kalanya database dibuat dalam susunan yang diinginkan tetapi server tidak. Anda tidak ingin harus memulihkan semua database pengguna Anda dari cadangan dalam kasus ini.

6
AndrewSQL

Saya melakukan sesuatu seperti ini dan itu berhasil tetapi Anda harus mengingat indeks yang menunjuk ke tipe data sebagai teks/varchar/nvarchar harus dijatuhkan, jalankan skrip dan kemudian buat indeks.

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 

ini jawaban pertamaku yang diposting maafkan kekacauanku

5
Jeffry