3

「a」や「a」などの値を持つ主キーとして varchar 列を持つことは可能ですか? MS SQL Server 2008 では常にこのエラー「主キー制約違反」が発生します。Oracle ではエラーは発生しません。ところで、私はこの方法を実装していません.OracleからSQLサーバーにデータを移行しようとしているだけです.

よろしく

4

6 に答える 6

4

SQL-92 標準では、文字列を比較する目的で、比較前に文字列が同じ長さになるようにパディングされることが規定されています。通常、パディング文字はスペースです。

したがって、'a' と 'a' は EQUAL を比較し、PK 制約に違反します。 http://support.microsoft.com/kb/316626

それ以来、この動作が変更されたことを示すものは何も見つかりませんでした。

varchar の代わりに varbinary を使用しても問題が解決する場合がありますが、これも希望どおりにならない場合があります。

于 2010-06-10T10:29:03.460 に答える
2

インポートするデータの種類とその長さに応じて、textまたは列を使用できます。これにより、スペースが保持されます。スペースがパディングされるため、適切ではない場合があります。ntextchar

于 2009-12-30T11:49:22.620 に答える
0

varbinary として保存してから、選択時に varchar に変換してみてください。

于 2009-12-30T11:54:33.887 に答える
0

これは ANSI_PADDING と関係があるのではないかと考えました: しかし、ここでの私のテストでは、PK (おそらく UNIQUE INDEXES も試していません) の場合、残念ながらまだ役に立たないことが示されています。

そう:

SET ANSI_PADDING ON

非PKフィールドで機能します-つまり、挿入の末尾のスペースを保持しますが、何らかの理由でPKでは機能しません...

見る :

http://support.microsoft.com/kb/154886/EN-US/

于 2009-12-30T12:09:37.710 に答える
0

末尾のスペースを取り除かないデータ型を使用してください。

于 2009-12-30T11:46:42.157 に答える
0

Oracle 列のデータの長さを保持する別の列を主キー制約に追加できます。これにより、必要に応じてデータをインポートし、オラクル データを再構築することができます。オラクル データの長さと Microsoft テーブルの長さを使用して、不足しているスペースを追加してレポートなどに表示するビューを使用できます。

于 2016-10-04T01:42:24.540 に答える