Jeśli zainstalowany SQL Server z domyślnych opcjach sortowania, może się okazać, że następujące kwerendy zwraca te same wyniki:
CREATE TABLE mytable
(
mycolumn VARCHAR(10)
)
GO
SET NOCOUNT ON
INSERT mytable VALUES('Case')
GO
SELECT mycolumn FROM mytable WHERE mycolumn='Case'
SELECT mycolumn FROM mytable WHERE mycolumn='caSE'
SELECT mycolumn FROM mytable WHERE mycolumn='case'
można zmienić zapytanie, zmuszając sortowania na poziomie kolumny:
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE'
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'case'
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case'
-- if myColumn has an index, you will likely benefit by adding
-- AND myColumn = 'case'
SELECT DATABASEPROPERTYEX('<database name>', 'Collation')
Ponieważ zmiana tego ustawienia może mieć wpływ na aplikacje i zapytania SQL, najpierw izolowałbym ten test.Z SQL Server 2000 można łatwo uruchomić instrukcję ALTER TABLE, aby zmienić kolejność sortowania konkretnej kolumny, co powoduje, że wielkość liter ma znaczenie. Po pierwsze, należy wykonać następujące zapytanie w celu określenia, co trzeba zmienić go z powrotem do:
EXEC sp_help 'mytable'
Drugi rekordów powinno zawierać następujące informacje, w domyślnej scenariusz:
COLUMN_NAME Układanie
mycolumn SQL_Latin1_General_CP1_CI_AS
Bez względu na kolumnę "Sortowanie", teraz wiesz, czego potrzebujesz, aby zmienić ją ponownie po ou wprowadzić następujące zmiany, które zmusi wrażliwość obudowy:
ALTER TABLE mytable
ALTER COLUMN mycolumn VARCHAR(10)
COLLATE Latin1_General_CS_AS
GO
SELECT mycolumn FROM mytable WHERE mycolumn='Case'
SELECT mycolumn FROM mytable WHERE mycolumn='caSE'
SELECT mycolumn FROM mytable WHERE mycolumn='case'
Jeśli to śruby rzeczy, można go zmienić z powrotem, po prostu wydając nową instrukcji ALTER TABLE (pamiętaj, aby zastąpić mój identyfikator UKLADAJ z jednej znalazłeś poprzednio):
ALTER TABLE mytable
ALTER COLUMN mycolumn VARCHAR(10)
COLLATE SQL_Latin1_General_CP1_CI_AS
Jeśli utkniesz z SQL Server 7.0, można spróbować tego rozwiązania, które mogłyby być trochę bardziej przeboju wydajności (należy uzyskać jedynie wynik dla pierwszego meczu):
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10))
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10))
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10))
-- if myColumn has an index, you will likely benefit by adding
-- AND myColumn = 'case'
Jeśli masz wątpliwości, kieruj obie strony porównania na wielkie z GÓRNY ... –