Tabella A ha un campo calcolato denominato Computed1. È persisted
e non è nullo. Inoltre, calcola sempre un'espressione che è char (50). È anche unico e ha un vincolo chiave unico su di esso.Come inserire vincoli di chiave esterna su un campo calcolato in SQL Server?
La tabella B ha un campo RefersToComputed1, che deve fare riferimento a un valore Computed1 valido.
cercando di creare un vincolo di chiave esterna di B RefersToComputed1 che fa riferimento a un' Computed1 porta alla seguente errore:
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.
D: Perché questo errore creato? Ci sono misure speciali necessarie per le chiavi esterne per le colonne calcolate e, in caso affermativo, quali sono?
Sommario:
- Il problema specifico sale dal computerizzata, char base, essendo campi varchar. Quindi, Computed1 è varchar (50) e non char (50).
- È preferibile disporre di un cast che circonda un'espressione di campo calcolato per forzarlo su un tipo specifico. Il merito va a Cade Roux per questo suggerimento.
buono catch - CHAR (50) sarà riempito a 50 caratteri di lunghezza con spazi, mentre VARCHAR non lo sarà - un altro vantaggio per l'utilizzo di VARCHAR su CHAR per questo genere di cose! –
Persistato avrebbe dovuto indicizzarlo, che sarebbe necessario per creare un FK su di esso ... – gbn
Puoi anche fare un cast nell'espressione della colonna computata per assicurarti che la colonna persistente sia del tipo che pensi sia. Questo è un grosso problema nelle operazioni con le stringhe. –