2009-08-16 99 views
7

我有一堆NVARCHAR列,我怀疑这些列包含VARCHAR列中完全可存储的数据。然而,我不能只是去改变列的类型为VARCHAR,并希望最好的,我需要做一些检查。确定nvarchar列中的varchar内容

我想进行转换,因为数据是静态的(它在将来不会改变),并且列被索引,并且与实际的(nvarchar)索引相比,可以从较小的(varchar)索引中受益。

如果我简单说

ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200) 

那么我不会得到一个错误或警告。 Unicode数据将被截断/丢失。

我该如何检查?

+0

你有测试/开发环境? – 2009-08-16 10:21:00

+0

我在工作,并使用它。但在这里,我需要为我自己的用途拍一些小的东西,一次只能用。 – 2009-08-16 10:32:21

+0

希望谷歌可能会拿起这句话:测试如果nvarchar只包含varchar数据 – Thymine 2012-02-08 20:30:53

回答

22

为什么不在这里和之后查看哪些数据会丢失?

这假设列类型为nvarchar(200)开始与

SELECT * 
FROM TableName 
WHERE columnName <> CAST(CAST(columnName AS varchar(200)) AS nvarchar(200)) 
+0

像魅力一样工作!谢谢! – 2009-08-16 10:31:17

1

嗯有趣。

我不确定你可以在SQL查询中做到这一点。你很高兴在代码中做到这一点?如果是这样,你可以得到所有的记录,然后遍历字符串中的所有字符并检查。但是,这是一个缓慢的方式。