¿Cómo poner restricciones de clave externa en campos calculados en un servidor SQL?
La Tabla A tiene un campo calculado llamado Computed1. Suspersisted
y no nulo Además, siempre se calcula en una expresión que es char (50). También es único y tiene una restricción clave única.
La Tabla B tiene un campo RefersToComputed1, que debe hacer referencia a un valor Computed1 válido.
Intentar crear una restricción de clave externa en RefersToComputed1 de B que haga referencia a A 'Computed1 conduce al siguiente error:
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.
P: ¿Por qué se crea este error? ¿Se necesitan medidas especiales para claves foráneas para columnas calculadas y, de ser así, cuáles son?
Resumen:
El problema específico surge de los campos calculados, basados en caracteres, que son varchar. Por lo tanto, Computed1 es varchar (50) y no char (50).Es mejor tener un reparto alrededor de la expresión de un campo calculado para forzarlo a un tipo específico. El crédito va a Cade Roux por este consejo.