代码之家  ›  专栏  ›  技术社区  ›  Andrei Rînea

确定nvarchar列中的varchar内容

  •  8
  • Andrei Rînea  · 技术社区  · 16 年前

    我有一堆nvarchar列,我怀疑它们在varchar列中包含完全可存储的数据。不过,我不能只将列的类型改为varchar,并希望得到最好的结果,我需要做一些检查。

    我之所以要进行转换,是因为数据是静态的(以后不会改变),并且列是索引的,与实际的(nvarchar)索引相比,较小的(varchar)索引会带来好处。

    如果我简单地说

    ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200)
    

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

    如何检查?

    2 回复  |  直到 15 年前
        1
  •  22
  •   gbn    16 年前

    为什么不来回转换,看看丢失了什么数据?

    这假设列是nvarchar(200)开头

    SELECT *
    FROM TableName
    WHERE columnName <> CAST(CAST(columnName AS varchar(200)) AS nvarchar(200))
    
        2
  •  1
  •   Noon Silk    16 年前

    嗯,很有趣。

    我不确定您是否可以在SQL查询本身中执行此操作。你愿意用代码来做吗?如果是这样,您可以获取所有记录,然后循环遍历字符串中的所有字符并进行检查。但是,老兄,这是一种缓慢的方式。