La conversion SQL de varchar à uniqueidentifier échoue en vue

Je suis bloqué sur le scénario suivant. J'ai une database avec une table avec des données sur les clients et une table où je place des dossiers pour surveiller ce qui se passe sur notre site B2B.

La table client est la suivante:

  • ID, int, non null
  • GUID, uniqueidentfier, non null, key primaire
  • D'autres choses…

La table de surveillance:

  • ID, int, non null
  • USERGUID, uniqueidentifier, null
  • PARAMETER2, varchar (50), null
  • D'autres choses…

Dans PARAMETER1, vous findez des guids clients ainsi que d'autres types de données stockés.

Maintenant la question est venue de order à nos clients selon leur dernière date de visite, les clients les plus récemment visités doivent venir en haut d'une grid.

J'utilise Entity Framework et j'ai eu des problèmes de comparaison de la string et du type de guid, j'ai donc décidé de faire une vue au dessus de ma table de monitoring:

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 dans EF et fait ma requête Linq. Il n'a rien renvoyé, j'ai donc extrait la requête SQL générée. Lors du test de la requête dans SQL Management Studio, j'ai rencontré l'erreur suivante: La conversion a échoué lors de la conversion d'une string de caractères en identifiant unique.

Le problème réside dans l'extrait suivant (simplifié pour cette question, mais donne également 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, j'obtiens mes résultats:

 SELECT * FROM CM_CUSTOMER c LEFT JOIN [v_LastViewDateCustomer] v on c.GUID = v.customerguid 

J'ai essayé de faire du violon SQL, mais ça fonctionne sur ce site. http://sqlfiddle.com/#!3/66d68/3

Quelqu'un qui peut me diriger dans la bonne direction?

Utilisation

 TRY_CONVERT(UNIQUEIDENTIFIER, parameter2) AS customerguid 

au lieu de

  CONVERT(UNIQUEIDENTIFIER, parameter2) AS customerguid 

Les vues sont insérées dans la requête et le CONVERT peut s'exécuter avant le WHERE .

Pour plus d'informations, voir SQL Server ne doit pas générer d'erreurs illogiques