D'ACCORD. J'ai enfin créé une vue qui fonctionne :
SELECT TOP (100) PERCENT id, CAST(CASE WHEN IsNumeric(MyCol) = 1 THEN MyCol ELSE NULL END AS bigint) AS MyCol
FROM dbo.MyTable
WHERE (MyCol NOT LIKE '%[^0-9]%')
Merci à AdaTheDev et CodeByMoonlight . J'ai utilisé vos deux réponses pour en arriver là. (Merci aux autres répondeurs aussi bien sûr)
Maintenant, lorsque je fais des jointures avec d'autres cols bigint ou que je fais quelque chose comme 'SELECT * FROM MyView where mycol=1', il renvoie le résultat correct sans erreur. Je suppose que le CAST dans la requête elle-même empêche l'optimiseur de requête de regarder la table d'origine, comme Christian Hayter l'a dit, cela pourrait se produire avec les autres vues