SELECT
B.ID, R.COUNTRY_ID, R.LOOK_UP, R.VALUE
FROM
BUSINESS_TABLE B
INNER JOIN
MASTER_TABLE1 M1 on M1.MASTER_ID = B.B_ID
LEFT JOIN
MASTER_TABLE2 M2 on M2.MASTER_ID = B.B_ID
LEFT JOIN
ANOTHER_TABLE OT on OT.ID = M2.MASTER_ID
LEFT JOIN
[dbo].[TEST_REFERENCE]R ON M2.C_ID = R.LOOK_UP
WHERE
OT.ACTIVE = 1
Dans les tableaux ci-dessus toutes les ID
colonnes sont int
sauf TEST_REFERENCE
table ci-dessous« La conversion a échoué » erreur n'est pas capturé lors de l'exécution en C# ou procédure stockée
select * from [TEST_REFERENCE]
ID REF_CODE(varchar 200) LOOK_UP(varchar 200) VALUE(varchar 200)
---- --------- ----------- ------------
1 COUNTRY 1 FRANCE
2 COUNTRY 2 GERMANY
3 USER POWER_USER ADMIN
4 USER POWER_USER MASTER
La requête exemple ci-dessus (entrée par les utilisateurs) que je valide en utilisant C# et en l'insérant dans DB (si passé) à d'autres fins.
Et ci-dessous est l'erreur que je reçois lors de l'exécution de la requête dans SSMS directement.
Msg 245, niveau 16, état 1, ligne 10
La conversion a échoué lors de la conversion de la valeur varchar 'de POWER_USER' au type de données int.
Mais il n'y a pas d'erreur lors de l'exécution de la même requête en utilisant cmd.ExecuteNonQuery()
ni dans la procédure stockée. Dans la procédure stockée, j'ai la requête seule dans une procédure stockée et l'exécution de la procédure dans C#/SSMS.
Apprécié dans n'importe qui donne des solution (s). Je sais que c'est à cause de la comparaison de varchar à int et j'ai une solution de contournement en coulant les valeurs. Mon exigence est de valider un type similaire de requêtes en utilisant C# (en tapant DB) et d'insérer dans DB seulement s'il passe en éliminant les requêtes erronées.
REMARQUE: cela fonctionne bien en C# (exception soulevée) lorsque nous avons seulement deux tables avec des conditions de jointure
Eh bien, il semble 'MASTER_TABLE2.C_ID' est de type' int' ... – Pikoh
ANOTHER_TABLE n'est pas LEFT JOIN-ed ici. Déplacez la condition WHERE à la clause ON pour obtenir le résultat réel LEFT JOIN. – jarlh
Aucune gestion des erreurs dans storedproc ni dans ExecuteNonQuery(). Vous ne récupérez aucune information du succès de la commande. Essayez de l'ajouter. – PeterRing