我正在寻找一种方法来确定列是否包含任何非ASCII数据,以便我无法将其从nVarChar转换为varChar.
理想情况下,我想在T-SQL中执行此操作.
一种简单的方法是转换为 varchar
select *
from yourtable
where nvarcharcolumn <> cast(nvarcharcolumn as varchar(8000))
Run Code Online (Sandbox Code Playgroud)
目前的另一个答案是缺少一步.所有它检查的是,在转换为varchar它们仍然比较相等 - 而不是它们实际上是相同的字符.
字符串N'?????'将无声地转换为'4"*8?'并且在许多排序规则下仍然相等.
看到
SELECT nvarcharcolumn,
CAST(nvarcharcolumn AS VARCHAR(4000))
FROM ( VALUES(N'?????')) V(nvarcharcolumn )
WHERE nvarcharcolumn <> cast(nvarcharcolumn AS VARCHAR(4000))
Run Code Online (Sandbox Code Playgroud)
我会检查它在转换到varchar并再次返回后往返到完全相同的值.你可以这样做
WHERE nvarcharcolumn <> cast(nvarcharcolumn as varchar(4000)) collate Latin1_General_100_BIN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |