【问题标题】:Query to change table collation in SQL Server 2008查询以更改 SQL Server 2008 中的表排序规则
【发布时间】:2014-03-02 19:46:56
【问题描述】:
在我的数据库中,一个表排序规则不同于所有其他表。
我想将该表排序规则更改为与所有其他表相同。
现在,我可以使用 SSMS 设计更改表排序规则,但我想使用查询来更改排序规则。目前,我的一张表排序规则是Thai_CI_AS,我想更改排序规则是SQL_Latin1_General_CP1_CI_AS。
无法删除该表,因为它已经包含数据。
【问题讨论】:
标签:
sql-server
sql-server-2008
collation
【解决方案1】:
consult the documentation 绝不是一个坏主意。猜测源数据类型和可空性;您可以填写表格/列名:
ALTER TABLE dbo.TableName ALTER COLUMN ColumnName
NVARCHAR(255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL;
如果您无法查看文档,Management Studio有时会向您展示做某事的聪明方法(尽管它并不总是选择以最好的方式做事)。进入设计屏幕,更改排序规则,而不是单击 OK,而是单击 Script 按钮。
【解决方案2】:
这是一个有效的解决方案,我在其中一个 jira 数据库表上应用并测试了重置排序规则。
-- 正确更改列排序规则
ALTER TABLE [schemaName].[TableName]
ALTER COLUMN [columnName] [varchar](255)
COLLATE SQL_Latin1_General_CP437_CI_AI NOT NULL;
--检查指定表的字符串列排序规则
--列出所有具有相应排序规则的字符串列
SELECT c.name,
c.collation_name
FROM SYS.COLUMNS c
JOIN SYS.TABLES t ON t.object_id = c.object_id
WHERE t.name = 'TableName'
and c.collation_name is not null