2009-10-03 3 views
20

UNIQUE 및 대/소문자를 구분하는 방법이 있습니까?대/소문자를 구분하는 고유 한 열

나는 독특한 열에서

ABCDEABCDE

을 넣을 수 있어야합니다.

+11

@Mitch : 어쩌면 그가 직면 한 케이스 # 10 :-) 당신은 결코 알지 못합니다 .... –

+0

간단히 말해서, 나는 더 많은 옵션을 원합니다. 나는 테이블이 정말로 커질 것이기 때문에 36 대신에 62 개의 문자 옵션을 가지길 기대합니다. abc ... ABC ... 123 ... 또한 필드는 5 문자만을 사용합니다. –

+0

이 게시물은 기본적으로 다른 게시물에 무료입니다 http://stackoverflow.com/questions/1513911/most-efficient-way-to-unique-random-string –

답변

29

고유성은 고유 제한 조건을 사용하여 적용 할 수 있습니다.

고유 인덱스가 대소 문자를 구분하는지 여부는 서버 (또는 테이블) 데이터 정렬에 의해 정의됩니다.

할 수 있습니다이 쿼리를 사용하여 데이터베이스의 현재 데이터 정렬을 얻을 :

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation; 

당신은 같은 얻어야한다 : 데이터 정렬의 끝에 여기

SQLCollation 
———————————— 
SQL_Latin1_General_CP1_CI_AS 

은 "CI_AS을" 의미 : CI = 대소 문자 구분, AS = 액센트 구분.

필요에 따라 변경할 수 있습니다. 데이터베이스 및/또는 테이블에 대/소문자 구분 데이터 정렬이있는 경우 인덱스의 고유성이 대/소문자를 구분할 것으로 예상됩니다. abcdefABCDEF은 모두 고유 한 문자열이어야합니다.

마크

UPDATE

: 난 그냥이 (SQL 서버 2008 개발자 버전 64)을 시도

이 - (내 데이터베이스는 일반적으로 "Latin1_General_CI_AS 데이터 정렬을 사용하고 있지만 다른 한 당을 정의 할 수 있습니다 나를 위해 작동 테이블/심지어 VARCHAR 컬럼) 당 :

CREATE TABLE TestUnique 
    (string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS) 

CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string) 

INSERT INTO dbo.TestUnique(string) VALUES ('abc') 
INSERT INTO dbo.TestUnique(string) VALUES ('ABC') 

SELECT * FROM dbo.TestUnique 

을하고 난 다시 얻을 :

string 
ABC 
abc 
,

및 고유 색인에 대한 오류가 없습니다.

+1

나는 marc에 의해 나열된 스크립트를 시도하고 SQL Server 2008의 32 비트에서 제대로 작동했습니다. – RBarryYoung

+0

UI에서 테이블 당이 작업을 수행 할 방법이 없다고 보입니다. 그러나 전체 데이터베이스에 대해 데이터베이스를 만드는 동안 수행 할 수 있습니다. 이는 너무 먼 것 같습니다. –

0

대소 문자를 구분하는 데이터베이스에서 데이터를 가져와야했습니다. 기본 키를 소스의 기본 키인 열에 넣으려고하면 중복 키로 인해 수행 할 수 없습니다. 대/소문자를 구분 (테이블을 마우스 오른쪽 단추로 누르고 디자인을 선택하고 변경하려는 열을 강조 표시하고 데이터 정렬에서 elipsis를 클릭) 된 열 (varchar)의 데이터 정렬을 변경하고 이제는 정상적으로 작동합니다. (SQL Server 2008 R2 64 비트).

+1

설명없이 다운 투표. 고상한. – bvj

+0

SO 우주에 오신 것을 환영합니다. – cbmeeks

3

varchar/nvarchar 열에 이미 unique key/index이 정의되어있는 기존 테이블에서 수행해야하는 경우가 있습니다. 다음은 스크립트입니다.

ALTER TABLE [YourTable] DROP CONSTRAINT [UIX_YourUniqueIndex] 
GO 

ALTER TABLE [YourTable] ALTER COLUMN [YourColumn] [nvarchar](50) COLLATE Latin1_General_CS_AS NOT NULL; 
GO 

ALTER TABLE [YourTable] ADD CONSTRAINT [UIX_YourUniqueIndex] UNIQUE NONCLUSTERED 
(
    [YourColumn] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 
0

감사합니다 @Devraj Gadhavi가 단계별로 설명 했으므로 정확하게 수행해야합니다. 그 스크립트를 만들려고했으나 (SSMS 2008R2 사용), 나는 더 게으른 방식으로 같은 결과를 얻었습니다 :-).트리보기에서 필자는 내 테이블과 열을 찾은 다음 오른쪽 정렬을 변경하려는 열을 클릭하고 '수정'을 선택했습니다. 표시된 창에서 대소 문자를 구분하여 속성의 데이터 정렬을 변경 한 다음 창의 맨 위 섹션 (열이 테이블 형식으로 나열된 곳)의 열린 공간에서 아무 곳이나 마우스 오른쪽 단추를 클릭하고 "변경 스크립트 생성"을 선택했습니다 ... "