「a」や「a」などの値を持つ主キーとして varchar 列を持つことは可能ですか? MS SQL Server 2008 では常にこのエラー「主キー制約違反」が発生します。Oracle ではエラーは発生しません。ところで、私はこの方法を実装していません.OracleからSQLサーバーにデータを移行しようとしているだけです.
よろしく
「a」や「a」などの値を持つ主キーとして varchar 列を持つことは可能ですか? MS SQL Server 2008 では常にこのエラー「主キー制約違反」が発生します。Oracle ではエラーは発生しません。ところで、私はこの方法を実装していません.OracleからSQLサーバーにデータを移行しようとしているだけです.
よろしく
SQL-92 標準では、文字列を比較する目的で、比較前に文字列が同じ長さになるようにパディングされることが規定されています。通常、パディング文字はスペースです。
したがって、'a' と 'a' は EQUAL を比較し、PK 制約に違反します。 http://support.microsoft.com/kb/316626
それ以来、この動作が変更されたことを示すものは何も見つかりませんでした。
varchar の代わりに varbinary を使用しても問題が解決する場合がありますが、これも希望どおりにならない場合があります。
インポートするデータの種類とその長さに応じて、text
または列を使用できます。これにより、スペースが保持されます。スペースがパディングされるため、適切ではない場合があります。ntext
char
varbinary として保存してから、選択時に varchar に変換してみてください。
これは ANSI_PADDING と関係があるのではないかと考えました: しかし、ここでの私のテストでは、PK (おそらく UNIQUE INDEXES も試していません) の場合、残念ながらまだ役に立たないことが示されています。
そう:
SET ANSI_PADDING ON
非PKフィールドで機能します-つまり、挿入の末尾のスペースを保持しますが、何らかの理由でPKでは機能しません...
見る :
末尾のスペースを取り除かないデータ型を使用してください。
Oracle 列のデータの長さを保持する別の列を主キー制約に追加できます。これにより、必要に応じてデータをインポートし、オラクル データを再構築することができます。オラクル データの長さと Microsoft テーブルの長さを使用して、不足しているスペースを追加してレポートなどに表示するビューを使用できます。