Fonctions ISNULL, COALESCE

Comment utiliser ISNULL avec des valeurs int, des valeurs varchar

select Complaint.complaintProfileId,ISNULL(T2.MMB_id,'Notfound') as MMBId from complaints c join T2.. on T2.sno = c.sno 

Cette requête me donne une erreur

 Conversion failed when converting the varchar value 'Notfound' to data type int. MMB_id is a int 

Merci Soleil

Essayez de convertir votre colonne int en un varchar,

 SELECT Complaint.ComplaintProfileId, ISNULL(CONVERT(varchar(11), T2.MMB_id), 'Notfound') AS MMBId FROM complaints c join T2.. ON T2.sno = c.no 

Utilisez-le comme

 select Complaint.complaintProfileId,ISNULL(T2.MMB_id,0) as MMBId from complaints c join T2 on T2.sno = c.sno 

Cela dépend de ce que vous voulez returnner, si vous voulez le text 'Not Found' alors vous pouvez faire ce qui suit à votre SELECT avec une instruction CASE :

 select Complaint.complaintProfileId, CASE WHEN T2.MMB_id is not null Then T2.MMB_id ELSE 'Not Found' END as MMBId from complaints c join T2.. on T2.sno = c.sno 

Puisque le MMD_ID est un int vous pouvez également faire ce qui suit pour returnner un int :

 select Complaint.complaintProfileId, IsNull(T2.MMB_id, 0) as MMBId from complaints c join T2.. on T2.sno = c.sno 

C'est à vous de répondre à vos besoins.

Pour ISNULL, la première valeur détermine le type de données de l'expression et la deuxième valeur est convertie en le type de la première expression. Donc, il essaie de convertir votre varchar à un int. Je pense que COALESCE prend le type de données avec la plus haute priorité de toutes les expressions dans la COALESCE, ce qui, je pense dans ce cas, serait toujours l'int. Donc de toute façon je pense que vous avez besoin de lancer l'int à varchar.