2010-08-18 2 views
0

내 테이블에 화합물 고유 인덱스를 만들었습니다SQL Server 2008 : 고유 인덱스에서 데이터 정렬이 무시됩니까?

CREATE TABLE [dbo].[SearchIndexWord](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [CatalogID] [int] NOT NULL, 
    [Word] [nvarchar](100) NOT NULL, 
CONSTRAINT [PK_SearchIndexWord] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) 
ON [PRIMARY] 

CREATE UNIQUE NONCLUSTERED INDEX [IX_SearchIndexWord] ON [dbo].[SearchIndexWord] 
(
    [Word] ASC, 
    [CatalogID] ASC 
) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
ON [PRIMARY] 

전체 데이터베이스의 데이터 정렬은 SQL_Latin1_General_CP1_CI_AS 데이터로 설정됩니다. 나는 다음과 같은 T-SQL을 실행하면 인쇄 '같지 하는가'

IF 'm3/h' = 'm³/h' 
    PRINT 'Equals' 
ELSE 
    PRINT 'Does not equal' 

을 그리고, 나는 다음과 같은 삽입 문을 시도하는 경우 :

INSERT INTO [SearchIndexWord] (Word, CatalogID) VALUES ('m3/h', 1), ('m³/h', 1) 

을 나는 다음과 같은 오류 메시지가 :

Msg 2601, Level 14, State 1, Line 1 
Cannot insert duplicate key row in object 'dbo.SearchIndexWord' with unique index 'IX_SearchIndexWord'. 

왜 이런가요? 문서에서 찾을 수 없지만 구성된 데이터 정렬을 사용하여 두 키의 중복 조건을 검사한다고 가정합니다.

나는 그런 식으로 테이블, 열 및 인덱스 데이터 정렬을 검사했으며 모두 데이터베이스 데이터 정렬과 같습니다.

답변

1

이 시도 : 나를 위해

IF CAST('m3/h' AS NVARCHAR(100)) = CAST('m³/h' AS NVARCHAR(100)) 
    PRINT 'Equals' 
ELSE 
    PRINT 'Does not equal' 

, 이것은 당신이 중복 키 행 오류를 얻고있는 이유를 설명하는 'Equals'를 반환합니다.

코드 IF 'm3/h' = 'm³/h'의 값이 VARCHAR로 생성 된 것으로 의심됩니다.

+0

네가 맞아. 문제의 열에 다른 데이터 정렬 (SQL_Latin1_General_BIN)을 지정하여 문제를 해결했습니다. 또한, 다음과 같이 작동했습니다. IF N'm3/h '= N'm³/h'' – ErikHeemskerk

+0

CAST() 접근법은 두 문자열을 모두 유니 코드로 변환하기 때문에 작동합니다. 이 N'm3/H '= N'm³/h의' PRINT는 '같음'경우 ELSE PRINT 앞에 N 마커를 둬서 '같지 않음'이 할 수있는 빠르고/쉬운 방법과 같이이다 각 문자열에 대해 SQL Server가 각 문자열을 유니 코드로 처리하도록 말하면 '같음'을 얻습니다. 마찬가지로 다음 요약과 같이 COLLATE 절을 사용할 수도 있습니다. http://www.sqlmag.com/blog/practical-sql-server-45/tsql/Collation-SQL-Server-139576 –