Casse-tête d'un collègue de travail que je ne peux pas comprendre ...données ne filtre pas avant une jointure
update btd.dbo.tblpayroll
set empname = (select b.Legal_Name
from (SELECT Legal_Name,
Employee_ID
FROM Com.dbo.Workers
WHERE isnumeric(Employee_ID) = 1
) b
where b.Employee_ID = empnum
and b.Legal_name is not NULL
)
where empname is NULL
Msg 245, niveau 16, état 1, ligne 1 La conversion a échoué lors de la conversion varchar valeur 'N0007' au type de données int. L'alias de table b serait en fait une vue.
La valeur 'N0007' se trouve dans la table Workers. Je ne vois pas pourquoi on ne filtre pas les résultats qui sont joints.
EDIT:
L'alias ne, en fait, retourner les lignes correctes - donc isNumeric fait le travail.
Optimizer chose je pense aussi bien. où b.Employee_ID = CAST (empnum AS VARCHAR) devrait aider –
J'ai essayé de regarder le plan expliquer pour voir si je pourrais le repérer - mais je ne suis pas bien versé dans leur lecture. Votre requête a fonctionné assez bien dans la requête réelle. Merci. – Sam
@Stanislav - Je n'étais pas sûr du type de chacun, alors je pensais que convertir les deux en varchar était le pari le plus sûr. – tvanfosson