Έχουμε εγκατεστημένο έναν SQL SERVER με COLLATION GREEK_CI_AS
Σε αυτόν υπάρχουν εγκατεστημένες δύο βάσεις η μία myFirst_db
με το default COLLATION του SQL SERVER και η mySecond_db άλλη
μέ COLLATION GREEK_CI_AI
Στις δύο βάσεις υπάρχουν δύο ομοιοι πίνακες Products όπως παρακάτω
Πίνακας Products (
ProductId int,
PartDescription varchar(60),
Category varchar(10),
UnitOfMeassure varchar(10),
UnitPrice numeric(28,6)
)
Αν τώρα γράφαμε ένα query ώστε να πάρουμε ένα union και τον δύο πινάκων .
use myFirst_db
GO
select
ProductId,PartDescription,Category,UnitOfMeassure,UnitPrice from Products
union all
select
ProductId,PartDescription,Category,UnitOfMeassure,UnitPrice from mySecond_db..Products
θα είχαμε το παρακάτω αποτέλεσμα
Msg 457, Level 16, State 1, Line 1
Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict.
Ο τρόπος που μπορούμε να αποφύγουμε το παρακάτω λάθος είναι να δηλώσουμε στο Query και συγκεκριμμένα στα αλφαριθμητικά πεδία το COLLATION που έχει η βάση που κάνουμε use δηλ. το Query θα πρέπει να διαμορφωθεί όπως παρακάτω.
----η myFirst_db έχει COLLATION GREEK_CI_AS
use myFirst_db
GO
select
ProductId,PartDescription,Category,UnitOfMeassure,UnitPrice from Products
union all
select
ProductId,PartDescription COLLATE GREEK_CI_AS ,Category COLLATE GREEK_CI_AS ,UnitOfMeassure COLLATE GREEK_CI_AS ,UnitPrice from mySecond_db..Products
Ελπίζω το παραπάνω να φανεί χρήσιμο σε κάποιους από την κοινότητα το dotnetzone.