2013-07-12 13 views
33

mam przesunięty o jedną z naszych baz danych (DB1) z SQL Server 2008 do 2012 roku, a po uruchomieniu procedur przechowywanych otrzymuję następujący błądNie można rozwiązać konflikt sortowania pomiędzy

Nie można rozwiązać konflikt sortowania pomiędzy " SQL_Latin1_General_CP1_CI_AS”i "Latin1_General_CI_AS" w równej pracy

Zmieniłem sortowaniem w bazie danych przy użyciu

ALTER DATABASE [optimiser] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
ALTER DATABASE [optimiser] COLLATE SQL_Latin1_General_CP1_CI_AS 
ALTER DATABASE [optimiser] SET MULTI_USER 

Ale nadal pojawia się błąd, gdy uruchamiane są procedury przechowywane. Uważam, że SP używa łączenia z inną bazą danych (GE ihistorian) i ma niedopasowanie w porównywaniu. I tak jest, aby rozwiązać ten problem.

Na starym serwerze DB1 został ustawiony jako Latin1_General_CI_AS i działa dobrze. Nowa lokalizacja dla bazy danych ma domyślną wartość SQL_Latin1_General_CP1_CI_AS. Czy warto zmienić sortowanie n DB1 na nowym serwerze z powrotem na Latin1_General_CI_AS?

Odpowiedz

70

Rzeczą dotyczącą sortowania jest to, że chociaż baza danych ma własne sortowanie, każda tabela i każda kolumna może mieć własne sortowanie. Jeśli nie jest określony, przyjmuje domyślny obiekt macierzysty, ale może być inny.

Po zmianie sortowania bazy danych będzie to nowa wartość domyślna dla wszystkich nowych tabel i kolumn, ale nie zmieni to sortowania istniejących obiektów w bazie danych. Trzeba przejść i ręcznie zmienić sortowanie każdej tabeli i kolumny.

Na szczęście istnieją skrypty dostępne w Internecie, które mogą wykonać zadanie. I nie zamierzam polecić jakieś jak ja ich nie próbowali, ale oto kilka linków:

http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database

Update Collation of all fields in database on the fly

http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx

Jeśli trzeba mieć inny sortowania na dwóch obiektów lub nie można zmienić sortowania - między nimi można nadal używać JOIN, używając komendy COLLATE, i wybierając sortowanie, które chcesz dołączyć.

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE Latin1_General_CI_AS 

lub przy użyciu domyślnego sortowania bazy danych:

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE DATABASE_DEFAULT 
Powiązane problemy