2011-10-24 2 views
0

내 응용 프로그램의 데이터베이스 mydb에 tempdb와 다른 데이터 정렬이 있습니다. tempdb 임시 테이블과 mydb 영구 테이블간에 문자열 값을 비교하는 많은 예외가 발생합니다. tempdb와 동일한 데이터 정렬을 사용하여 mydb를 작성하기로 결정했습니다. 스크립트를 사용하여 데이터 정렬을 자동으로 설정해야합니다. 데이터 정렬이 자동으로 설정됩니다.

DECLARE @SQLCollation sql_variant 
SELECT @SQLCollation = DATABASEPROPERTYEX('tempdb', 'Collation') 
ALTER DATABASE mydb COLLATE @SQLCollation -- doesn't work 
ALTER DATABASE mydb COLLATE Latin1_General_CI_AS -- works, but doesn't suit me because I have to type in collation myself in this SQL 

그래서 어떻게 tempdb의 경우와 MYDB에 대해 동일한 데이터 정렬을 설정하는이 나는 시도했다?

답변

0
DECLARE @SQLCollation NVARCHAR(1000) 
SELECT @SQLCollation = 'ALTER DATABASE MyDb COLLATE '+CAST(DATABASEPROPERTYEX('Tempdb', 'Collation') as NVARCHAR(1000)) 
exec (@sqlcollation) 
+3

이 경우에만 시스템 테이블이 변경됩니다. 사용자 테이블이 아님 – gbn

2

db의 데이터 정렬을 변경해도 db의 기존 테이블의 데이터 정렬은 변경되지 않습니다.

또 다른 옵션은 임시 테이블을 만들 때 사용할 데이터 정렬을 지정하는 것입니다.

create table #TempTable 
(
    Name varchar(10) collate database_default 
) 

그러면 모든 테이블 문자 필드가 데이터베이스와 동일한 데이터 정렬을 가지고 있는지 비교할 수 있습니다.

+0

예, 알고 있습니다. –

3

ALTER DATABASE으로 DB 데이터 정렬을 변경할 수 없습니다. 이는 시스템 데이터베이스 (오브젝트 이름 등) 만 변경합니다. (Dalex의 답변)

Changing SQL Server Database sorting에 대한 답변에 설명 된 단계를 따라야합니다.

COLLATE Database_Default을 사용하면 무엇을 모르는 채로 데이터 정렬을 강요하는 또 다른 옵션이 있습니다. SQL Server error "Implicit conversion of because the collation of the value is unresolved due to a collation conflict."SQL Server - is there a way to mass resolve collation conflicts

관련 문제