2014-08-29 58 views
0

我需要更改已还原数据库的排序规则以匹配服务器和tempdb数据库。我明白我可以使用ALTER DATABASE和ALTER TABLE来改变收集。但是它只会影响添加到表格中的新数据吗?我一定要沿着这条路走,在他们重新创建用户数据库和所有对象 更改数据库中所有对象的排序规则

  • 出口,如bcp实用工具
  • 创建一个使用工具的所有数据需要

    • 脚本新数据库
    • 在正确的集合中编写表格并导入所有数据。

    这是一个Microsoft SQL Server 2008

  • +0

    ALTER COLUMN将改变现有数据的整理,但是你不能有指标/引用列的约束。我认为导出/导入方法是最干净的,但您可以在同一个数据库中创建新对象,迁移数据,删除旧表并重命名。 – 2014-08-29 12:27:28

    +0

    @ DanGuzman-SQLServerMVP:如果(旧)表被其他表引用,是不是也需要删除外键(并在之后重新创建它们)? – 2014-08-29 12:34:51

    +0

    是的,同样的考虑适用于外键约束。 – 2014-08-29 12:43:06

    回答

    1

    我用这个脚本:

    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 
    

    还要检查Set or Change the Database Collation

    +0

    请注意,如果索引,主键约束或唯一约束引用列,则ALTER COLUMN将失败。 – 2014-08-29 12:24:40

    相关问题