我需要在數據庫中的所有表中的所有列重新歸類: 如何重置數據庫中所有列的排序規則?
我想用數據庫的默認排序
我試圖改變它在數據庫屬性:
但整理已列在列中,這意味着我不能覆蓋它
任何人有腳本,可以爲我做?
我需要在數據庫中的所有表中的所有列重新歸類: 如何重置數據庫中所有列的排序規則?
我想用數據庫的默認排序
我試圖改變它在數據庫屬性:
但整理已列在列中,這意味着我不能覆蓋它
任何人有腳本,可以爲我做?
重置列的最快方法是SET UNUSED列,然後添加一個具有相同名稱和數據類型的列。
這將是最快的方式,因爲兩個操作都不會觸及實際的表(僅字典更新)。
列的實際排序會改變(重置列將是最後一列)。如果你的代碼依賴於列的排序(它不應該!),你可以創建一個視圖,該列將以正確的順序排列(重命名錶,創建與舊錶相同名稱的視圖,從基表中撤銷授予,添加贈款查看)。
SET UNUSED方法不會回收列使用的空間(而刪除列將釋放每個塊中的空間)。
希望這會有所幫助。
你能否更新這個更詳細的信息,例如一個實際的腳本,包括如何將數據從舊列轉移到新列(如果有必要)? – David
見(更改數據庫整理)http://msdn.microsoft.com/en-us/library/ms174269.aspx
ALTER DATABASE database_name COLLATE collation_name
我拼成一個腳本,應該做一個足夠體面的工作(希望)。在適當的數據庫中運行腳本,並將結果作爲文本。然後複製粘貼&輸出到一個腳本窗口更改每列的排序規則:
declare @NewCollationName sysname
set @NewCollationName = 'Latin1_General_CS_AS'
select
'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(st.schema_id)) + '.' + QUOTENAME(st.name) +
' ALTER COLUMN ' + QUOTENAME(sc.name) + ' ' + styp.name + '(' +
CASE WHEN sc.max_length = -1 THEN 'max' ELSE CONVERT(varchar(10),sc.max_length) END +
') collate ' + @NewCollationName + '
go
'
from
sys.columns sc
inner join
sys.tables st
on
sc.object_id = st.object_id
inner join
sys.types styp
on
sc.user_type_id = styp.user_type_id
where
sc.collation_name is not null and
OBJECTPROPERTY(st.object_id,N'IsMSShipped')=0
有一點要注意,但是,如果列約束的目標或生成的腳本將無法工作以模式綁定對象(視圖或函數)爲目標。
在這種情況下,您必須腳本化依賴對象,將它們從數據庫中刪除,然後運行上述腳本生成的腳本,最後重新添加依賴對象。
建議的腳本(可以找到here)是爲了遍歷數據庫中的所有表並將排序規則更改爲所需的規則。
它是基於腳本:
ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME varchar(100) COLLATE Latin1_General_CI_AS NULL
不要你的意思整理? –
你對!我改變了,謝謝 – Sasha