problème sur requête union entre deux tables de deux bases différentes d'un même serveur mssql 2000

Le
bob
bonjour à tous,

mon problème concerne l'exécution d'une requête union sur deux tables de
deux bases différentes qui sont sur un même serveur sql 2000.
Je passe par l'analyseur de requêtes pour exécuter cette requête.

select champ1 from base1.dbo.table1
union all
select champ2 from base2.dbo.table2

elle ne fonctionne pas, voici le message d'erreur que je recois :

********
Serveur : Msg 457, Niveau 16, État 1, Ligne 1
La conversion implicite de la valeur varchar vers varchar ne peut pas être
traitée car le classement de la valeur n'est pas résolu en raison d'un
conflit de classement.

********

les deux champs sont exactement du même type (varchar(8)) et si j'exécute
une à une les deux select de cette requete , cela fonctionne :

select count(*) from
(
select champ1 from base1.dbo.table1
) as source

--
110 000 000

(1 ligne(s) affectée(s))

cela fonctionne donc

idem pour le deuxième select

select count(*) from
(
select compte from base2.dbo.table2
) as source

--
100 000 000

(1 ligne(s) affectée(s))


les deux select séparés fonctionnent donc bien mais dès que je veux faire
une union j'ai le message d'erreur cité plus haut.
Concernant les problèmes de droits, cela ne peut pas venir de là car j'ai
vérifié.

Je serais reconnaissant à tout personne qui pourrait me donner des idées
pour résoudre ce problème.

Merci d'avance

srmt
bob
Vos réponses
Trier par : date / pertinence
Dominique Peralta
Le #11222191
Tu trouveras le classement par défaut pour chacune de tes bases, en allant
dans EM, clique droit sur la base, Propriétés, et dans le bas de l'onglet
Général, tu peux y voir le type de classement. D'après ton message, il se
peut que le classement ne soit pas le même pour tes 2 bases.

"bob" news:3f27f496$0$21110$

bonjour à tous,

mon problème concerne l'exécution d'une requête union sur deux tables de
deux bases différentes qui sont sur un même serveur sql 2000.
Je passe par l'analyseur de requêtes pour exécuter cette requête.

select champ1 from base1.dbo.table1
union all
select champ2 from base2.dbo.table2

elle ne fonctionne pas, voici le message d'erreur que je recois :

********
Serveur : Msg 457, Niveau 16, État 1, Ligne 1
La conversion implicite de la valeur varchar vers varchar ne peut pas être
traitée car le classement de la valeur n'est pas résolu en raison d'un
conflit de classement.

********

les deux champs sont exactement du même type (varchar(8)) et si j'exécute
une à une les deux select de cette requete , cela fonctionne :

select count(*) from
(
select champ1 from base1.dbo.table1
) as source

-----------
110 000 000

(1 ligne(s) affectée(s))

cela fonctionne donc

idem pour le deuxième select

select count(*) from
(
select compte from base2.dbo.table2
) as source

-----------
100 000 000

(1 ligne(s) affectée(s))


les deux select séparés fonctionnent donc bien mais dès que je veux faire
une union j'ai le message d'erreur cité plus haut.
Concernant les problèmes de droits, cela ne peut pas venir de là car j'ai
vérifié.

Je serais reconnaissant à tout personne qui pourrait me donner des idées
pour résoudre ce problème.

Merci d'avance

srmt
bob




Fred BROUARD
Le #11268761
A lire sur le sujet :
http://sqlpro.developpez.com/SQL_AZ_7.html#SCHEMA4

A +

bob a écrit:
bonjour à tous,

mon problème concerne l'exécution d'une requête union sur deux tables de
deux bases différentes qui sont sur un même serveur sql 2000.
Je passe par l'analyseur de requêtes pour exécuter cette requête.

select champ1 from base1.dbo.table1
union all
select champ2 from base2.dbo.table2

elle ne fonctionne pas, voici le message d'erreur que je recois :

********
Serveur : Msg 457, Niveau 16, État 1, Ligne 1
La conversion implicite de la valeur varchar vers varchar ne peut pas être
traitée car le classement de la valeur n'est pas résolu en raison d'un
conflit de classement.

********

les deux champs sont exactement du même type (varchar(8)) et si j'exécute
une à une les deux select de cette requete , cela fonctionne :

select count(*) from
(
select champ1 from base1.dbo.table1
) as source

-----------
110 000 000

(1 ligne(s) affectée(s))

cela fonctionne donc

idem pour le deuxième select

select count(*) from
(
select compte from base2.dbo.table2
) as source

-----------
100 000 000

(1 ligne(s) affectée(s))


les deux select séparés fonctionnent donc bien mais dès que je veux faire
une union j'ai le message d'erreur cité plus haut.
Concernant les problèmes de droits, cela ne peut pas venir de là car j'ai
vérifié.

Je serais reconnaissant à tout personne qui pourrait me donner des idées
pour résoudre ce problème.

Merci d'avance

srmt
bob





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
bob
Le #11268741
en effet j'ai une base dont le classement est
sql_latin1_general_cp1_ci_as et l'autre
qui est french_ci_as
le problème est que je ne sais pas comment
faire pour modifier cette propriété.
De plus, est ce dangereux de modifier le classement ?
J'ai vu que je pouvais le faire au niveau de la table
en faisant un clic droit puis modifier
mais dans les choix qui me sont proposés,
classement sql ou classement windows,
je ne trouve pas le classement french_ci_as
mais seulement le french (dans la liste windows)

merci à dom et à fred.
j'ai qu'un accès limité au net, j'irai donc voir ton site
ce soir fred.

srmt
t


"bob" news:3f27f496$0$21110$

bonjour à tous,

mon problème concerne l'exécution d'une requête union sur deux tables de
deux bases différentes qui sont sur un même serveur sql 2000.
Je passe par l'analyseur de requêtes pour exécuter cette requête.

select champ1 from base1.dbo.table1
union all
select champ2 from base2.dbo.table2

elle ne fonctionne pas, voici le message d'erreur que je recois :

********
Serveur : Msg 457, Niveau 16, État 1, Ligne 1
La conversion implicite de la valeur varchar vers varchar ne peut pas être
traitée car le classement de la valeur n'est pas résolu en raison d'un
conflit de classement.

********

les deux champs sont exactement du même type (varchar(8)) et si j'exécute
une à une les deux select de cette requete , cela fonctionne :

select count(*) from
(
select champ1 from base1.dbo.table1
) as source

-----------
110 000 000

(1 ligne(s) affectée(s))

cela fonctionne donc

idem pour le deuxième select

select count(*) from
(
select compte from base2.dbo.table2
) as source

-----------
100 000 000

(1 ligne(s) affectée(s))


les deux select séparés fonctionnent donc bien mais dès que je veux faire
une union j'ai le message d'erreur cité plus haut.
Concernant les problèmes de droits, cela ne peut pas venir de là car j'ai
vérifié.

Je serais reconnaissant à tout personne qui pourrait me donner des idées
pour résoudre ce problème.

Merci d'avance

srmt
bob




Pierre Goiffon
Le #11268701
Dans le message:3f28b9f8$0$21110$,
bob
en effet j'ai une base dont le classement est
sql_latin1_general_cp1_ci_as et l'autre
qui est french_ci_as
le problème est que je ne sais pas comment
faire pour modifier cette propriété.
De plus, est ce dangereux de modifier le classement ?
J'ai vu que je pouvais le faire au niveau de la table
en faisant un clic droit puis modifier
mais dans les choix qui me sont proposés,
classement sql ou classement windows,
je ne trouve pas le classement french_ci_as
mais seulement le french (dans la liste windows)



Regardez le BOL sur l'instruction COLLATE : elle permet de faire une
conversion de classement au cas par cas.

--
_________________________________________________________
/
. Pierre GOIFFON .
. p g o i f f o n @ w e b c i t y . f r .
_________________________________________________________/
Un grand merci à OE Quote Fix pour rendre OE utilisable :)
=> http://home.in.tum.de/~jain/software/quotefix.php
bob
Le #11268661
ok merci
mais j'aurais voulu savoir quelles sont les conséquences
d'un changement de classement sur une table ou une colonne sur les requetes
et autres programmes qui se connectent à cette base de données

merci d'avance

srmt
bob


"Pierre Goiffon" news:bgap6p$elt$
Dans le message:3f28b9f8$0$21110$,
bob > en effet j'ai une base dont le classement est
> sql_latin1_general_cp1_ci_as et l'autre
> qui est french_ci_as
> le problème est que je ne sais pas comment
> faire pour modifier cette propriété.
> De plus, est ce dangereux de modifier le classement ?
> J'ai vu que je pouvais le faire au niveau de la table
> en faisant un clic droit puis modifier
> mais dans les choix qui me sont proposés,
> classement sql ou classement windows,
> je ne trouve pas le classement french_ci_as
> mais seulement le french (dans la liste windows)

Regardez le BOL sur l'instruction COLLATE : elle permet de faire une
conversion de classement au cas par cas.

--
_________________________________________________________
/
. Pierre GOIFFON .
. p g o i f f o n @ w e b c i t y . f r .
_________________________________________________________/
Un grand merci à OE Quote Fix pour rendre OE utilisable :)
=> http://home.in.tum.de/~jain/software/quotefix.php



Pierre Goiffon
Le #11268581
Dans le message:3f291c52$0$21121$,
bob
ok merci
mais j'aurais voulu savoir quelles sont les conséquences
d'un changement de classement sur une table ou une colonne sur les
requetes et autres programmes qui se connectent à cette base de
données

merci d'avance



Le classement influe sur :
- la sensitivité aux accents
- la sensitivité à la casse
- le charset

Le modifier a donc une influence sur ces 3 paramètres.

--
_________________________________________________________
/
. Pierre GOIFFON .
. p g o i f f o n @ w e b c i t y . f r .
_________________________________________________________/
Un grand merci à OE Quote Fix pour rendre OE utilisable :)
=> http://home.in.tum.de/~jain/software/quotefix.php
Publicité
Poster une réponse
Anonyme