복붙노트

[SQL] SQL Server 데이터베이스 정렬 변경

SQL

SQL Server 데이터베이스 정렬 변경

나는 SQL Server 데이터베이스의 데이터 정렬을 변경하는 요청이있다 :

그러나 나는이 이상한 오류가 발생합니다 :

독일 오류 메시지 죄송합니다. 나는 언어를 영어로 전환하지만, 여기에 번역이하는 방법을 모른다 :

좀 더 그런 오류의 톤을 얻었다.

해결법

  1. ==============================

    1.당신은 당신의 전망과 테이블 반환 함수에서 SCHEMABINDING 함께 삭제해야합니다. 이를 확인하려면 당신은 INFORMATION_SCHEMA 뷰를 조회 할 수 있습니다 :

    당신은 당신의 전망과 테이블 반환 함수에서 SCHEMABINDING 함께 삭제해야합니다. 이를 확인하려면 당신은 INFORMATION_SCHEMA 뷰를 조회 할 수 있습니다 :

    SELECT TABLE_SCHEMA, TABLE_NAME AS VIEW_NAME
    FROM INFORMATION_SCHEMA.VIEWS
    WHERE VIEW_DEFINITION LIKE '%SCHEMABINDING%'
    
    SELECT ROUTINE_SCHEMA, ROUTINE_NAME
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_DEFINITION LIKE '%SCHEMABINDING%'
    

    이 스크립트를 모든 컬럼의 정렬을 변경할 수 있습니다 :

    DECLARE @collation nvarchar(128)
    DECLARE @commands table ([SQL] nvarchar(max))
    DECLARE @cursor cursor
    DECLARE @sql nvarchar(max)
    
    SET @collation = 'SQL_Latin1_General_CP1_CI_AS'
    
    INSERT @commands ([SQL])
    SELECT 'ALTER TABLE ' + QUOTENAME(c.TABLE_SCHEMA) +'.'+ QUOTENAME(c.TABLE_NAME)
        + ' ALTER COLUMN ' + QUOTENAME(c.COLUMN_NAME)
        + ' ' + c.DATA_TYPE
        + ISNULL('(' + LTRIM(STR(c.CHARACTER_MAXIMUM_LENGTH)) + ')', '')
        + ISNULL(' COLLATE ' + @collation, '')
        + ' ' + CASE c.IS_NULLABLE WHEN 'NO' THEN 'NOT ' ELSE '' END + 'NULL'
    FROM INFORMATION_SCHEMA.COLUMNS c
    INNER JOIN INFORMATION_SCHEMA.TABLES t
    ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME
    WHERE t.TABLE_TYPE = 'BASE TABLE'
    AND c.COLLATION_NAME <> @collation
    
    SET @cursor = CURSOR FOR SELECT [SQL] FROM @commands
    OPEN @cursor
    FETCH NEXT FROM @cursor INTO @sql
    
    WHILE @@FETCH_STATUS = 0
    BEGIN 
        PRINT @sql
        EXEC (@sql)
    
        FETCH NEXT FROM @cursor INTO @sql
    END
    
  2. ==============================

    2.다음은 클러스터 된 인덱스입니다 기본 키의 coulmns 될 것입니다. 데이터베이스의 데이터 정렬을 변경하는 경우 클러스터 된 인덱스의 레코드는 모든 테이블이 다시 정렬 될 필요가있을 것이다, 컬럼의 오름차순으로 저장됩니다.

    다음은 클러스터 된 인덱스입니다 기본 키의 coulmns 될 것입니다. 데이터베이스의 데이터 정렬을 변경하는 경우 클러스터 된 인덱스의 레코드는 모든 테이블이 다시 정렬 될 필요가있을 것이다, 컬럼의 오름차순으로 저장됩니다.

  3. ==============================

    3.이 경우에도 제거 스키마 바인딩은 도움이되지 않습니다

    이 경우에도 제거 스키마 바인딩은 도움이되지 않습니다

    데이터 정렬을 변경하면 KB 325335에 설명 된 단계를 필요

    그것은 2000 주로 SQL Server에 적용되지만, 동일한 원리가 적용됩니다

  4. from https://stackoverflow.com/questions/2938422/changing-sql-server-database-sorting by cc-by-sa and MIT license