如何判断列是否可以从nVarChar变为varChar?

时间:2018-01-21 04:37:38

标签: sql-server tsql

我正在寻找一种方法来确定某列是否包含任何非ASCII数据,以便我无法将其从nVarChar转换为varChar。

理想情况下,我想在T-SQL中执行此操作。

2 个答案:

答案 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