Можно ли изменить сортировку для всех объектов в базе данных?изменение сортировки базы данных SQL Server
Например, если я изменяю сортировку базы данных, она должна изменить все объекты (таблицы, procs и т. Д.), Связанные с этой базой данных.
Можно ли изменить сортировку для всех объектов в базе данных?изменение сортировки базы данных SQL Server
Например, если я изменяю сортировку базы данных, она должна изменить все объекты (таблицы, procs и т. Д.), Связанные с этой базой данных.
У меня была эта проблема некоторое время назад, когда мы сменили базовую базу данных на поддержку unicode и потребовали изменить наборы символов в старой базе данных для поддержки венгерского языка.
Этот сценарий поможет вам изменить порядок сортировки; вам необходимо вручную изменить настройку базы данных. Мне не приходилось запускать его за долгое время, пока он не исправит расчетные столбцы, но могут возникнуть другие проблемы. Не запускайте его в живой базе данных, не тестируя его сначала - вы можете выбрать, какие изменения внесены, чтобы вы могли провести аудит или выяснить те, которые были пропущены позже.
Declare
@NewCollation varchar(255), @DBName sysname
Select @NewCollation = 'Latin_1_CI_AI', -- change this to the collation that you need
@DBName = DB_NAME()
Declare
@CName varchar(255), @TbleName sysname, @objOwner sysname, @Sql varchar(8000), @Size int, @Status tinyint, @Colorder int
Declare CurWhileLoop cursor read_only forward_only local
for Select
QUOTENAME(C.Name)
,T.Name
,QUOTENAME(U.Name) + '.' +QUOTENAME(O.Name)
,C.Prec
,C.isnullable
,C.colorder
From syscolumns C
inner join systypes T on C.xtype=T.xtype
inner join sysobjects O on C.ID=O.ID
inner join sysusers u on O.uid = u.uid
where T.Name in ('varchar', 'char', 'text', 'nchar', 'nvarchar', 'ntext')
and O.xtype in ('U')
and C.collation != @NewCollation
and objectProperty(O.ID, 'ismsshipped')=0
order by 3, 1
open CurWhileLoop
SET XACT_ABORT ON
begin tran
fetch CurWhileLoop into @CName, @TbleName, @objOwner, @Size, @Status, @Colorder
while @@FETCH_STATUS =0
begin
set @Sql='ALTER TABLE '[email protected]+' ALTER COLUMN '[email protected]+' '[email protected]+ isnull ('('
+convert(varchar,@Size)+')', '') +' COLLATE '+ @NewCollation
+' '+case when @Status=1 then 'NULL' else 'NOT NULL' end
exec(@Sql) -- change this to print if you need only the script, not the action
fetch CurWhileLoop into @CName, @TbleName, @objOwner, @Size, @Status, @Colorder
end
close CurWhileLoop
deallocate CurWhileLoop
commit tran
Привет, Я пытаюсь сценарий, но индексы мешают мне изменять сортировку столбцов (говорит, что объект зависит от столбца). Знаете ли вы обходное решение для этого? Благодаря! –
Вам придется бросить их всех, испугавшись. Вы можете записать их с помощью студии управления, а затем снова отложить их. – u07ch
возможно дубликат [Изменение сортировки базы данных SQL Server] (http://stackoverflow.com/questions/2938422/changing-sql-server-database-sorting) – gbn