2009-10-03 9 views
20

Czy istnieje sposób na utworzenie kolumny UNIQUE i wielkości liter?Niepowtarzalna kolumna SQL Server 2008 z rozróżnianiem wielkości liter

chcę móc umieścić

ABCDE i ABCDE

w unikalnym kolumny.

+11

@Mitch: może on stoi skrzynka # 10 :-) nigdy nie wiesz .... –

+0

Po prostu, chcę więcej opcji. Spodziewam się, że stół stanie się naprawdę duży, więc mam 62 opcje zamiast 36. abc ... ABC ... 123 ... Również w polu jest tylko 5 znaków. –

+0

Ten wpis jest zasadniczo bezpłatny dla innego posta http://stackoverflow.com/questions/1513911/most-efficient-way-to-unique-random-string –

Odpowiedz

29

Unikalność można wymusić za pomocą unikalnego ograniczenia.

To, czy unikalny indeks rozróżnia wielkość liter, jest określane przez serwer (lub tabelę) zestawianie.

można uzyskać bieżące sortowanie bazy danych z tego zapytania:

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

i powinieneś otrzymać coś takiego:

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

Tutaj „CI_AS” na końcu zestawień oznacza: CI = Rozróżnianie wielkości liter, AS = Z akcentem wrażliwym.

Można to zmienić na wszystko, czego potrzebujesz. Jeśli w bazie danych i/lub tabeli występuje sortowanie z rozróżnianiem wielkości liter, spodziewałbym się, że w wyjątkowości indeksu będzie rozróżniana wielkość liter, np. Twój abonent musi być akceptowany jako unikalny ciąg znaków.

Marc

UPDATE:

Właśnie próbowałem to (SQL Server 2008 Developer Edition x64) - działa na mnie (moja baza danych jest na ogół za pomocą „Latin1_General_CI_AS sortowania, ale mogę określić inny jeden na stół/na kolumnie VARCHAR nawet):

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 

i wrócę:

string 
ABC 
abc 

i żaden błąd dotyczący naruszenia unikalnego indeksu.

+1

Próbowałem skryptowane wymienione przez marc i działało dobrze dla mnie, na SQL Server 2008, 32bit. – RBarryYoung

+0

Wygląda na to, że nie ma możliwości zrobienia tego w tabeli w interfejsie użytkownika. Można to jednak zrobić podczas tworzenia bazy danych dla całej bazy danych, co wydaje się nieco zbyt daleko idące. –

0

Potrzebowałem do importu danych z bazy danych uwzględniającej wielkość liter. Kiedy próbowałem umieścić klucz podstawowy w kolumnie, która jest kluczem podstawowym na źródle, nie mogłem tego zrobić z powodu duplikowania kluczy. Zmieniłem sortowanie dla kolumny (varchar) na wielkość liter (kliknij prawym przyciskiem myszy na stole, wybierz Projekt, podświetl kolumnę, którą chcesz zmienić i kliknij elipsis w sortowaniu), a teraz działa dobrze. (SQL Server 2008 R2 64-bitowy).

+1

Głosowanie bez wyjaśnienia. Z klasą. – bvj

+0

Witaj w świecie SO. – cbmeeks

3

Jeśli ktoś musi to zrobić na istniejącej tabeli, która już ma wartość unique key/index zdefiniowaną w kolumnie varchar/, poniżej znajduje się skrypt.

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

Dzięki @Devraj Gadhavi za krok po kroku, ponieważ jest to dokładnie to, co musiałem zrobić również. Miałem zamiar wykonać te skrypty, ale potem (używając SSMS 2008R2), osiągnąłem to samo w bardziej leniwy sposób :-).W widoku drzewa zlokalizowałem moją tabelę i kolumnę, a następnie kliknąłem prawym przyciskiem myszy na kolumnie Chciałem zmienić sortowanie i wybrałem opcję "Modyfikuj". W wyświetlonym oknie zmieniłem sortowanie we właściwościach na wielkość liter, a następnie w dowolnym miejscu na otwartej przestrzeni w górnej części okna (gdzie kolumny są wymienione w formie tabeli) Kliknąłem prawym przyciskiem i wybrałem opcję "Generate Change Script ... "

Powiązane problemy