SQL Server 2008の主キーとして末尾のスペースを持つVARCHAR
-
22-09-2019 - |
質問
これは、「」と「」のような値を持つ主キーとしてvarchar型の列を持つことが可能ですされ、常にMS SQL Server 2008でこのエラー「PRIMARY KEY制約の違反」を与えます。 Oracleではすべてのエラーを与えるdons't。 ところで私は私が唯一のSQL ServerにOracleのデータを移行しようとしています。
この方法を実装していませんよよろしく
解決
あなたはtext
またはntext
1は、インポートするデータの種類に依存し、列、およびその長さを使用することができます - これは、スペースを保持します。 char
の意志パッドスペースなので、適当でない場合があります。
他のヒント
文字列の比較のために、文字列が比較の前に同じ長さに埋められていることをSQL-92標準のおもむく:通常パッド文字はスペースです。
したがって「」と「」EQUALを比較し、これがPK制約に違反します。 http://support.microsoft.com/kb/316626する
私はこの動作を示すために何を見つけることができませんでしたが、それ以来変更されました。
あなたは代わりにvarchar型のvarbinary型を使用して逃げるかもしれませんが、これはあなたがどちらかやりたいことがありません。
末尾のスペースを削除しないデータ型を使用します。
あなたが選択したときにvarchar型に変換し、その後varbinary型として保存してみてください、とあります。
私はこれはANSI_PADDINGとは何かを持っているかもしれないと思った。しかし、私はここでテストし、PKを(おそらく一意索引にも、試していない)のために、これはまだ、残念ながら助けにはならないことを示している。
。ですからます:
SET ANSI_PADDING ON
非PKフィールドのワークス - である、それは、インサートに、いくつかの理由ではないのPK ...
に末尾のスペースを維持しますを参照してください:
は、Oracleの列内のデータの長さを保持し、あなたの主キー制約に別の列を追加することができます。これは、データをインポートするために、あなたがする必要があるときにOracleデータを再構築することができます - レポートなどに表示するために不足しているスペースを再度追加するには、Microsoftの表の長さとともにOracleデータの長さを使用するビューで