Βάσεις σε SQL Server με διαφορετικό COLLATION και σύνδεση πινάκων μεταξύ τους σε QUERY

Έχουμε εγκατεστημένο έναν 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.

 

Share


Έχουν δημοσιευτεί Τρίτη, 31 Μαρτίου 2009 8:25 πμ από το μέλος imanos
Καταχώρηση στις κατηγορίες:

Σχόλια:

Χωρίς Σχόλια