복붙노트

[SQL] 데이터 정렬 충돌을 해결할 수 없습니다

SQL

데이터 정렬 충돌을 해결할 수 없습니다

나는 2008 년 2012 SQL 서버에서 우리의 데이터베이스 (DB1) 중 하나를 이동하고 내가 저장 프로 시저를 실행할 때 나는 다음과 같은 오류가 발생합니다

나는 사용하여 데이터베이스의 데이터 정렬을 변경

ALTER DATABASE [optimiser] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [optimiser] COLLATE SQL_Latin1_General_CP1_CI_AS
ALTER DATABASE [optimiser] SET MULTI_USER

저장 프로 시저를 실행할 때마다하지만 난 여전히 오류가 발생합니다. 은 SP가 다른 데이터베이스 (GE의 ihistorian)에 가입 사용하고 있기 때문에 나는 생각과는 대조 불일치가 있습니다. 이 문제를 해결하기 위해 어쨌든있다.

이전 서버 DB1에 Latin1_General_CI_AS으로 설정이 잘 작동했다. DB를위한 새로운 위치는 SQL_Latin1_General_CP1_CI_AS 데이터의 기본이있다. 그것은 Latin1_General_CI_AS에 새 서버 다시 정렬 N DB1을 변경 가치가?

해결법

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

    1.데이터 정렬에 대한 문제는 데이터베이스 자체 정렬, 모든 테이블을 가지고 있으며, 비록 모든 열은 자신의 정렬을 가질 수 있다는 것입니다. 지정되지 않은 경우는 부모 객체의 기본이 필요하지만 다를 수 있습니다.

    데이터 정렬에 대한 문제는 데이터베이스 자체 정렬, 모든 테이블을 가지고 있으며, 비록 모든 열은 자신의 정렬을 가질 수 있다는 것입니다. 지정되지 않은 경우는 부모 객체의 기본이 필요하지만 다를 수 있습니다.

    데이터베이스의 데이터 정렬을 변경하는 경우, 모든 새로운 테이블과 열에 대한 새로운 기본이 될 것이다, 그러나 데이터베이스 내부의 기존 개체의 데이터 정렬을 변경하지 않습니다. 당신은 가서 수동으로 모든 테이블과 컬럼의 정렬을 변경해야합니다.

    다행히 일을 할 수있는 인터넷에서 사용할 스크립트가 있습니다. 나는 내가 그들을 시도했지만 여기에 몇 가지 링크입니다하지 않은으로 추천하지 않을거야 :

    http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database

    즉시 데이터베이스에있는 모든 필드의 업데이트 데이터 정렬

    http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx

    당신이 두 개의 객체에 다른 데이터 정렬이 필요하거나 데이터 정렬을 변경할 수없는 경우 - 당신은 여전히 ​​COLLATE 명령을 사용하여, 당신은 가입에 대해 원하는 정렬을 선택하는 그들 사이에 가입 할 수 있습니다.

    SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE Latin1_General_CI_AS 
    

    또는 기본 데이터베이스 데이터 정렬을 사용하여 :

    SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE DATABASE_DEFAULT
    
  2. from https://stackoverflow.com/questions/17616620/cannot-resolve-collation-conflict by cc-by-sa and MIT license