8

VARCHAR列に完全に格納可能なデータが含まれていると思われるNVARCHAR列がたくさんあります。ただし、列のタイプをVARCHARに変更して、最善を期待することはできません。何らかのチェックを行う必要があります。

データは静的であり(将来変更されない)、列にインデックスが付けられ、実際の(nvarchar)インデックスと比較して小さい(varchar)インデックスの恩恵を受けるため、変換を実行したいと思います。

簡単に言えば

ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200)

そうすれば、エラーや警告は表示されません。Unicodeデータは切り捨てられるか失われます。

どうすれば確認できますか?

4

2 に答える 2

22

そこにキャストして戻って、どのデータが失われるかを確認してみませんか?

これは、列がnvarchar(200)であることを前提としています。

SELECT *
FROM TableName
WHERE columnName <> CAST(CAST(columnName AS varchar(200)) AS nvarchar(200))
于 2009-08-16T10:23:57.730 に答える
1

うーん面白い。

SQLクエリ自体でこれを実行できるかどうかはわかりません。コードでそれを実行して満足していますか?その場合は、すべてのレコードを取得してから、文字列内のすべての文字をループして確認できます。しかし、それは遅い方法です。

于 2009-08-16T10:19:21.737 に答える