SQL Server 데이터베이스의 데이터 정렬을 어떻게 변경합니까?


16

단일 데이터 정렬-Latin1_General_CI_AS (표준 데이터 정렬)에서 모든 데이터베이스를 표준화하려고합니다. SQL_Latin1_General_CP1_CI_AS에있는 일부 데이터베이스가 있습니다.

ALTER DATABASE를 사용하여 데이터베이스 데이터 정렬을 변경할 수 있지만 새 개체에만 영향을 미칩니다. 내 이해는 기존 열을 변경하는 유일한 방법은 모든 테이블의 각 열에 대해 ALTER COLUMN을 수행하는 것이므로 모든 인덱스를 삭제하고 다시 작성해야합니다.

다음과 같이 보일 것입니다.

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

전체 데이터베이스의 모든 varchar, char, text, nvarchar, nchar 및 ntext 열에 대해 반복하십시오. 그것은 엄청난 SQL 스크립트 일 것입니다.

더 쉬운 방법이 있습니까, 아니면 누구나 SQL 스크립트 작성을 자동화하는 방법을 제안 할 수 있습니까?

답변:


9

MS KB 325335 에는 전체 db 및 모든 열에 대해이를 수행하는 방법에 대한 옵션이 있습니다.

원래:

  1. 스크립트 데이터베이스 테이블 (새 데이터 정렬)
  2. DTS / SSIS 데이터 (시찰 데이터 정렬)
  3. 구속 조건 추가


2

불행히도 이것은 SQL Server에서 쉬운 일이 아닙니다.

기존 데이터베이스 개체 (테이블, 저장 프로 시저, 뷰 등)에 대해 Redgate의 SQL Compare와 같은 스크립팅 도구를 사용할 수 있습니다. 라이센스가없는 경우 무료 평가판을 사용할 수 있습니다. 올바른 데이터 정렬을 사용하여 새 데이터베이스를 만들고 스크립트에서 개체를 다시 작성한 후 SSIS를 실행하여 한 데이터베이스에서 다른 데이터베이스로 데이터를 전송할 수 있습니다. 많은 데이터가있는 경우 T-SQL 대량 삽입을 사용하십시오.

해당 서버의 향후 데이터베이스에 대한 올바른 데이터 정렬을 위해 서버의 기본 데이터 정렬을 변경할 수 있습니다. 다음 MSDN 문서는 ALTER DATABASE 및 ALTER TABLE의 COLLATE 절을 사용하여 변경되는 내용을 설명합니다.

데이터베이스 데이터 정렬 설정 및 변경 (SQL Server 2008 온라인 설명서)

ALTER DATABASE 문의 COLLATE 절을 사용하여 사용자 데이터베이스에서 작성된 새 오브젝트의 데이터 정렬을 변경할 수 있습니다 . 이 명령문은 기존 사용자 정의 테이블의 열 데이터 정렬을 변경하지 않습니다. ALTER TABLE 의 COLLATE 절을 사용하여이를 변경할 수 있습니다 .

데이터베이스 데이터 정렬을 변경하면 다음이 변경됩니다.

  • 데이터베이스의 기본 데이터 정렬 이 새로운 기본 데이터 정렬은 이후에 데이터베이스에서 생성 된 모든 열, 사용자 정의 데이터 형식, 변수 및 매개 변수에 적용됩니다. 데이터베이스에 정의 된 오브젝트에 대해 SQL 문에 지정된 오브젝트 ID를 해석 할 때도 사용됩니다.
  • 시스템 테이블의 모든 char, varchar, text, nchar, nvarchar 또는 ntext 열이 새 데이터 정렬로 변경됩니다.
  • 저장 프로 시저 및 사용자 정의 함수에 대한 모든 기존 char, varchar, text, nchar, nvarchar 또는 ntext 매개 변수와 스칼라 반환 값이 새 데이터 정렬로 변경됩니다.
  • char, varchar, text, nchar, nvarchar 또는 ntext 시스템 데이터 유형과 이러한 시스템 데이터 유형을 기반으로하는 모든 사용자 정의 데이터 유형이 새로운 기본 데이터 정렬로 변경됩니다.

1

일반적으로이 작업을 라이브 서버에 수행하지 않는 것이 좋습니다. 내가 마지막으로 보았을 때 Microsoft는 공식적으로 지원하지 않았습니다. 실제로이 작업을 수행하려면 올바른 데이터 정렬을 사용하여 새 인스턴스를 생성하고 데이터베이스를이 인스턴스로 마이그레이션해야합니다.

기본 데이터 정렬이 다른 서버로 DB를 복원하면 tempdb가 새 서버의 데이터 정렬을 가지므로 모든 종류의 재미가 발생하므로 권장하지 않습니다.



1

Infomation_Schema 뷰를 사용하여 스크립트를 쉽게 생성 할 수 있지만 이것이 문제를 해결하는 가장 좋은 방법인지는 잘 모르겠습니다. 지연된 DB에서 모든 인덱스를 다시 만들려면 시간 / 로그 공간이 많이 걸릴 수 있습니다. 새 인스턴스로 마이그레이션 (복원 아님)으로 이동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.