La Tabla A tiene un campo calculado llamado Computed1. Es persisted
y no nulo. Además, siempre calcula una expresión que es char (50). También es único y tiene una restricción clave única en él.¿Cómo poner restricciones de clave foránea en los campos computados en el servidor sql?
La Tabla B tiene un campo RefersToComputed1, que debe hacer referencia a un valor válido de Computed1.
Tratando de crear una restricción de clave externa sobre B RefersToComputed1 que hace referencia a un' Computed1 conduce al error siguiente:
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: ¿Por qué se crea este error? ¿Se necesitan medidas especiales para las claves externas para las columnas calculadas y, de ser así, cuáles son?
Resumen:
- El problema específico se eleva desde computarizada, basada, siendo varchar campos Char. Por lo tanto, Computed1 es varchar (50) y no char (50).
- Lo mejor es tener un molde rodeando la expresión de un campo calculado para forzarlo a un tipo específico. El crédito va a Cade Roux por este consejo.
good catch - CHAR (50) se rellenaría a 50 caracteres de longitud con espacios, mientras que VARCHAR no lo sería - ¡otra ventaja para usar VARCHAR sobre CHAR para este tipo de cosas! –
Persistió necesitaría indexarlo, lo cual sería necesario para crear un FK en él ... – gbn
También puede realizar un molde en la expresión de columna computada para asegurarse de que su columna persistente sea del tipo que usted cree que es. Ese es un gran problema en las operaciones de cuerdas. –