9

テーブル A には、Computed1 という計算フィールドがあります。persistednull ではありません。また、常に char(50) である式に計算されます。また、一意であり、一意のキー制約があります。

テーブル B には、フィールド RefersToComputed1 があり、有効な Computed1 値を参照する必要があります。

A' Computed1 を参照する B の RefersToComputed1 に外部キー制約を作成しようとすると、次のエラーが発生します。

Error SQL01268: .Net SqlClient Data Provider: Msg 1753, Level 16, State 0, Line 1 Column
'B.RefersToComputed1' is not the same length or scale as referencing column 'A.Computed1' in
foreign key 'FK_B_A'. Columns participating in a foreign key relationship must be defined with
the same length and scale.

Q: なぜこのエラーが発生するのですか? 計算列の外部キーに必要な特別な手段はありますか? もしそうなら、それらは何ですか?


概要:

  • 特定の問題は、計算された char ベースのフィールドが varchar であることから生じます。したがって、Computed1 は varchar(50) であり、char(50) ではありません。
  • 計算フィールドの式をキャストで囲み、特定の型に強制することをお勧めします。このヒントは Cade Roux の功績によるものです。
4

3 に答える 3

10

計算フィールドはchar(M)、char(N)などで構成され、合計するとM + N + .. = 50になりますが、計算フィールド自体はvarchar(50)です。RefersToComputed1をchar(50)ではなくvarchar(50)に変更すると、問題が解決します。

計算フィールドの外部キーは特別な処理を必要としません(ただし、計算列では永続化が必要になる場合があります)。

于 2010-03-30T21:27:18.473 に答える
1

RefersToComputed1データ型、長さ、照合はまったく同じですかComputed1

それを再確認してください...たとえば、Computed1それがあなたが期待するものであることを確認するために、最後のキャストまたは照合が必要ですか?これは、2つの列が異なるというエラーが表示されているためです。

編集:charとvarcharは同一のデータ型ではないため、変更するにはCASTが必要です

于 2010-03-30T21:27:45.327 に答える
1

RefersToComputed1タイプの主キーですかchar(50)?

于 2010-03-30T21:16:53.073 に答える