Le texte de type de données ne peut pas être utilisé comme opérande pour les opérateurs UNION, INTERSECT ou EXCEPT car il n'est pas comparable
J'ai une table
- Id (PK)
- Propriétaire int
- DescriptionText texte
qui est jointe à une autre table
- Id (FK)
- Participant int
Le Propriétaire peut être un Participant, et s'il l'est, de la même référence (dans la table user) est le Propriétaire et le Participant. J'ai donc fait:
SELECT TableA.Id,TableA.Owner,TableA.Text
FROM TableA
WHERE TableA.Owner=@User
UNION
SELECT TableA.Id,TableA.Owner.TableA.Text
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User
Cette requête doit retourner tous les jeux de données distincts, où un certain @Utilisateur est le Propriétaire ou le Participant ou les deux.
Et il serait, si SQL Server ne pas jeter
Le type de données texte ne peut pas être utilisé comme opérande de l'UNION, INTERSECT ou except les opérateurs parce qu'il n'est pas comparable.
Depuis Id est un PK, et le Texte est de la même table, pourquoi SQL Server souhaitez comparer le Texte à tous?
Je peux utiliser UNION ALL
pour arrêter la détection des doublons, mais puis-je contourner cela sans perdre la distinction des résultats?
source d'informationauteur Alexander
Vous devez vous connecter pour publier un commentaire.
Façon correcte
Cesser d'utiliser
TEXTE
il est obsolète. Modifier schéma de la table.Solution de contournement
Fonte à
NVARCHAR(MAX)
: