Also, once failures are found, you could distinguish actual '?' values from Unicode values and get the percentage of Unicode characters with ...
SELECT t.val
, UnicodeStringLen = len(t.val)
, UnicodeNonQmarkChars = len(replace(t.val,'?',''))
, NonQmarkChars = len(replace(convert(varchar, t.val),'?',''))
, UnicodeChars = len(replace(t.val,'?',''))
- len(replace(convert(varchar, t.val),'?',''))
, PercentUnicodeChars =
(LEN(replace(t.val,'?','')) - len(replace(convert(varchar, t.val),'?','')))
* 100.0 / len(t.val)
FROM #TMP t
WHERE t.val <> CONVERT(varchar,t.val) --FAILURES ONLY