我需要在数据库中的所有表中的所有列重新归类: 如何重置数据库中所有列的排序规则?
我想用数据库的默认排序
我试图改变它在数据库属性:
但整理已列在列中,这意味着我不能覆盖它
任何人有脚本,可以为我做?
我需要在数据库中的所有表中的所有列重新归类: 如何重置数据库中所有列的排序规则?
我想用数据库的默认排序
我试图改变它在数据库属性:
但整理已列在列中,这意味着我不能覆盖它
任何人有脚本,可以为我做?
重置列的最快方法是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