表A有一個名爲Computed1的計算字段。它是persisted
而不是null。另外,它總是計算一個表達式,即char(50)。它也是獨一無二的,它有一個獨特的關鍵約束。如何將外鍵約束放在sql server中的計算字段上?
表B有一個字段RefersToComputed1,它應該引用一個有效的Computed1值。
試圖創建B的RefersToComputed1引用了」 Computed1導致以下錯誤外鍵約束:
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.
問:爲什麼這個錯誤產生的?計算列的外鍵是否需要特殊措施?如果是的話,它們是什麼?
總結:
- 的具體問題從計算機,基於焦炭,場是VARCHAR上升。因此,Computed1是varchar(50)而不是char(50)。
- 最好是圍繞計算字段的表達式強制轉換爲特定類型。對於這個技巧,Cade Roux感謝信。
好catch-CHAR(50)將被填充爲50個字符長度的空格,而VARCHAR將不會是另一個加上使用VARCHAR而不是CHAR來處理這些事情! – 2010-03-30 21:29:06
需要持久化才能將其索引,這將需要在其上創建FK ... – gbn 2010-03-30 21:32:21
您還可以在計算列表達式中進行強制轉換,以確保持久化列的類型與您認爲的類型相同。這是字符串操作中的一個大問題。 – 2010-03-30 22:16:51