无法更新SYS.COLUMNS - 任何其他的方法呢?
-
26-09-2019 - |
题
我刚刚发现,自从我创造了我的DB是有不同的排序规则,然后移民到新的排序规则的新服务器在不同的服务器上,现在我一直在有麻烦,我决定改变的所有值旧的排序规则。
因此,我试图执行此查询:
sp_configure "Allow Updates", 1
GO
RECONFIGURE WITH OVERRIDE
GO
UPDATE sys.columns SET collation_name =
'SQL_Latin1_General_CP1_CI_AS' WHERE collation_name = 'Hebrew_CI_AS'
GO
sp_configure "Allow Updates", 0
GO
RECONFIGURE
GO
但这里是查询的输出:
Configuration option 'allow updates' changed from 0 to 1.
Run the RECONFIGURE statement to install.
Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.
Configuration option 'allow updates' changed from 1 to 0.
Run the RECONFIGURE statement to install.
<强>更新强>结果 根据答案波纹管,我只是寻找要执行的操作自动化的方式。
解决方案 3
此查询是产生一个脚本,将交换所有Hebrew_CI_AS
整理列Latin1_General_CI_AS
归类:
DECLARE @Script varchar(MAX)
SET @Script = CAST((
SELECT 'ALTER TABLE [' + Tables.Name + '] ALTER COLUMN [' +
[Columns].Name + '] ' + Types.Name + '(' +
CAST([Columns].max_length AS varchar) + ') COLLATE Latin1_General_CI_AS ' +
CASE WHEN [Columns].is_nullable = 0 THEN 'NOT ' ELSE '' END + 'NULL '
FROM sys.tables Tables INNER JOIN sys.all_columns [Columns]
ON [Tables].[object_id] = [Columns].[object_id]
INNER JOIN sys.types Types ON [Columns].system_type_id = Types.system_type_id
WHERE [Columns].collation_name = 'Hebrew_CI_AS'
FOR XML PATH('')
) AS varchar(MAX))
PRINT @Script
EXEC(@Script)
注意:有关列被索引/约束,你需要手动编辑,但是这也是东西,因为当执行上面的查询误差结果(约束等)包含表和列名,你必须承认它仍然比手工做的一切。
其他提示
您需要,以改变特定列的排序规则发出ALTER TABLE命令。
e.g。
ALTER TABLE YourTable
ALTER COLUMN ColA VARCHAR(10) COLLATE Latin1_General_CI_AS NOT NULL
查核此MSDN参考
可以使用alter table
改变核对对于每一列。
改变数据库归类的唯一方法是删除并重新创建该数据库。
不隶属于 StackOverflow