我正在寻找一种方法来确定某列是否包含任何非ASCII数据,以便我无法将其从nVarChar转换为varChar。
理想情况下,我想在T-SQL中执行此操作。
答案 0 :(得分:7)
一种简单的方法是转换为varchar
select *
from yourtable
where nvarcharcolumn <> cast(nvarcharcolumn as varchar(8000))
答案 1 :(得分:5)
另一个当前的答案是错过了一步。所有它检查的是,在转换为varchar
后,它们仍然比较相等 - 而不是它们实际上是相同的字符。
字符串N'⁴"*8?'
将无声地转换为'4"*8?'
,并且在许多排序规则下仍然相等。
见
SELECT nvarcharcolumn,
CAST(nvarcharcolumn AS VARCHAR(4000))
FROM ( VALUES(N'⁴"*8?')) V(nvarcharcolumn )
WHERE nvarcharcolumn <> cast(nvarcharcolumn AS VARCHAR(4000))
我会检查它在转换到varchar之后再往返到完全相同的值,然后再返回。你可以用
执行此操作WHERE nvarcharcolumn <> cast(nvarcharcolumn as varchar(4000)) collate Latin1_General_100_BIN