SQL conversion de type varchar type uniqueidentifier échoue en vue
Je suis bloqué sur le scénario suivant.
J'ai une base de données avec une table avec des données client et d'une table où j'ai mis les dossiers pour la surveillance de ce qui se passe sur notre site B2B.
La table client est comme suit:
- ID int not null
- GUID, uniqueidentfier, not null, primary key
- D'autres choses...
Le tableau de contrôle:
- ID int not null
- USERGUID, de type uniqueidentifier, null
- PARAMÈTRE2, varchar(50), null
- D'autres choses...
Dans PARAMÈTRE1 client guid comme wel comme d'autres types de données stockées.
Maintenant, la question est venue à l'ordre de nos clients en fonction de leur dernière visite date de la plus récente visité les clients doivent venir sur le dessus d'une grille.
Je suis en utilisant Entity Framework et j'ai eu des problèmes de comparaison de la chaîne et le type de guid, j'ai donc décidé de faire une vue sur le dessus de mon tableau de contrôle:
SELECT
ID,
CONVERT(uniqueidentifier, parameter2) AS customerguid,
USERguid,
CreationDate
FROM
MONITORING
WHERE
(dbo.isuniqueidentifier(parameter2) = 1)
AND
(parameter1 LIKE 'Customers_%' OR parameter1 LIKE 'Customer_%')
J'ai importé la vue en EF et fait ma requête Linq. Il n'a rien retourné, j'ai donc extrait le SQL généré requête. Lors de l'essai de la requête dans SQL Management Studio, j'ai eu l'erreur suivante:
Conversion a échoué lors de la conversion d'une chaîne de caractères de type uniqueidentifier.
Le problème réside dans l'extrait suivant (simplifié pour cette question, mais aussi donne une erreur:
SELECT *,
(
SELECT
[v_LastViewDateCustomer].[customerguid] AS [customerguid]
FROM [dbo].[v_LastViewDateCustomer] AS [v_LastViewDateCustomer]
WHERE c.GUID = [v_LastViewDateCustomer].[customerguid]
)
FROM CM_CUSTOMER c
Mais quand je fais une jointure, je reçois mes résultats:
SELECT *
FROM CM_CUSTOMER c
LEFT JOIN
[v_LastViewDateCustomer] v
on c.GUID = v.customerguid
J'ai essayé de faire un SQL violon, mais il est en train de travailler sur ce site. http://sqlfiddle.com/#!3/66d68/3
Quelqu'un qui peut me pointer dans la bonne direction?
SQL Server 2012
OriginalL'auteur CyclingFreak | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Utilisation
au lieu de
Vues sont intégrées dans la requête et le
CONVERT
peut s'exécuter avant leWHERE
.Pour plus de détails, voir le SQL Server ne devrait pas soulever d'illogique erreurs
Ainsi en supposant que votre
dbo.isuniqueidentifier
fonction fonctionne correctement, alors vous pouvez faireCASE WHEN dbo.isuniqueidentifier(parameter2) = 1 THEN CONVERT(UNIQUEIDENTIFIER, parameter2) END AS customerguid
à la place.Les deux solutions fonctionnent. Mais très lent (40 secondes pour obtenir 10 clients), donc j'ai encore un peu de travail à faire.
OriginalL'auteur Martin Smith