Change Collation Name
SQL Server'da Collation adını değiştirme bir çok kişinin ihtiyaç duyduğu bir değişiklik. Çoğu zaman çoğu kişi bu işi yapmak için yeniden veritabanı oluşturur. Aşağıdaki SQL kodu ile bunu rahatlıkla halladebilirsiniz.
Syntax : ALTER DATABASE VeritabanıAdı COLLATE CollationAdi
Örnek: ALTER DATABASE MEHMET COLLATE Turkish_CI_AS
5 yorum:
"The database could not be exclusively locked to perform the operation." hatası almamak için daha dolu bir çözüm...
ALTER DATABASE VeritabaniAdi SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE VeritabaniAdi COLLATE CollationAdi
ALTER DATABASE VeritabaniAdi SET MULTI_USER
mert
Paylaşım için teşekkür Mert.
COLLATE I DEISTIRMEK TABLOLARIN ICINDEKI COLOUMN BAZINDAKI COLLATELERI DEGISTIRMEZ GERCEK BIR DEGISIM YAPMAK ISTIYORSANIZ
TUM TABLOLARIN CONSTRAINLERI DROP ET
DATABASE I ALTER ET
TABLOLARIN COLLATELI OLANLARI ALTER ET
CONSTRAINTLERI GERI YUKLE
OHH NE GUZEL IS BU ISI YAPANA HELAL OLSUN :)
teşekkür
Tobloların hepsini drop etmenize gerek yok aşağıdaki kodu kullanarak default collate olmayanlaı değiştirebilmeniz için hazır kod üretir.
Kolay gelsin.
-------------------------------------------------------------
--- LM_ChangeCollation - Change collation in all tables
--- made by Luis Monteiro - ljmonteiro@eurociber.pt
--- modified by wilfred van dijk - wvand@wilfredvandijk.nl
-------------------------------------------------------------
DECLARE @new_collation varchar(100)
DECLARE @debug bit
DECLARE
@table sysname,
@previous sysname,
@column varchar(60),
@type varchar(20),
@legth varchar(4),
@nullable varchar(8),
@sql varchar(8000),
@msg varchar(8000),
@servercollation varchar(120)
/*
uncomment one of the following lines:
*/
set @new_collation = convert(sysname, databasepropertyex(DB_NAME(), 'collation'))
--- set @new_collation = convert(sysname, serverproperty('collation'))
/*
@debug = 0 to execute
*/
set @debug = 1
if @new_collation is null
begin
print 'which collation?'
goto einde
end
DECLARE C1 CURSOR FOR
select 'Table' = b.name,
'Column' = a.name,
'Type' = type_name(a.system_type_id),
'Length' = a.max_length,
'Nullable' = case when a.is_nullable = 0 then 'NOT NULL' else ' ' end
from sys.columns a
join sysobjects b
on a.object_id = b.id
where b.xtype = 'U'
and b.name not like 'dt%'
and type_name(a.system_type_id) in ('char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext')
and a.[collation_name] <> @new_collation
order by b.name,a.column_id
OPEN C1
FETCH NEXT
FROM C1
INTO @table,@column,@type,@legth,@nullable
set @previous = @table
WHILE @@FETCH_STATUS = 0
BEGIN
if @table <> @previous print ''
set @sql = 'ALTER TABLE ' + QUOTENAME(@table) + ' ALTER COLUMN ' + QUOTENAME(@column) + ' '
set @sql = @sql + @type + '(' + @legth + ')' + ' COLLATE ' + @new_collation + ' ' + @nullable
print @SQL
if @debug = 0
begin
begin try
EXEC (@sql)
end try
begin catch
print 'ERROR:' + ERROR_MESSAGE()
print ''
end catch
end
set @previous = @table
FETCH NEXT
FROM C1
INTO @table,@column,@type,@legth,@nullable
END
CLOSE C1
DEALLOCATE C1
einde:
Yorum Gönder