更改数据库中所有对象的排序规则

Joh*_*ter 0 sql-server sql-server-2008 sql-server-2008-r2

我需要更改已恢复数据库的排序规则以匹配服务器和 tempdb 数据库。我知道我可以使用 ALTER DATABASE 和 ALTER TABLE 来更改 collertion。但它只会影响添加到表中的新数据吗?我必须和

  • 重新创建用户数据库及其中的所有对象所需的脚本
  • 使用 bcp 实用程序等工具导出所有数据
  • 创建一个新数据库
  • 编写右侧集合中的表脚本并导入所有数据。

这是 Microsoft Sql Server 2008

Rah*_*thi 5

我使用了这个脚本:

DECLARE @collation NVARCHAR(64)
SET @collation = 'Latin1_General_CI_AS'

SELECT
    'ALTER TABLE [' + TABLE_SCHEMA  + '].[' + TABLE_NAME + '] '
  + 'ALTER COLUMN [' + COLUMN_NAME + '] '
  + DATA_TYPE + '(' + CASE CHARACTER_MAXIMUM_LENGTH 
        WHEN -1 THEN 'MAX' 
        ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) END + ') '
  + 'COLLATE ' + @collation + ' '
  + CASE WHEN IS_NULLABLE = 'NO' THEN 'NOT NULL' ELSE 'NULL' END
FROM INFORMATION_SCHEMA.columns
WHERE  COLLATION_NAME IS NOT NULL
AND TABLE_NAME IN ( SELECT TABLE_NAME from information_schema.tables WHERE table_type = 'BASE TABLE'  )
AND COLLATION_NAME <> @collation
Run Code Online (Sandbox Code Playgroud)

另请检查设置或更改数据库排序规则

  • 请注意,如果索引、主键约束或唯一约束引用该列,则 ALTER COLUMN 将失败。 (2认同)