sql - microsoft - No hay claves principales o candidatas en la tabla a la que se hace referencia
sql server management studio 2017 (2)
Error: no hay claves principales o candidatas en la tabla a la que se hace referencia ''dbo.Customers'' que coincidan con la lista de la columna de referencia en la clave externa ''FK_Reservation_Customers_FrstNme FOREIGN KEY''
DROP TABLE dbo.Customers;
DROP TABLE dbo.Staff;
DROP TABLE dbo.Rooms;
DROP TABLE dbo.Reservation;
GO
CREATE TABLE "Customers"(
CustomerID int IDENTITY (1,1) NOT NULL,
FirstName nvarchar(20) NULL,
LastName nvarchar(20) NULL,
StreetNo int NULL,
City nvarchar(20) NULL,
PostCode nvarchar(20) NULL,
Email nvarchar(50) NULL,
CONSTRAINT PK_Customers PRIMARY KEY
(
CustomerID
)
)
CREATE TABLE "Staff"(
StaffID nvarchar(20) NOT NULL,
Pass nvarchar(20) NOT NULL,
CONSTRAINT PK_Staff PRIMARY KEY
(
StaffID
)
)
CREATE TABLE "Rooms"(
RoomNo int NOT NULL,
RoomType nvarchar(20) NULL,
PricePerNight money NULL,
MaximumOccupancy int NULL,
No0fBeds int NULL,
NoOfBathrooms int NULL,
Entertainment bit NULL,
RoomService bit NULL,
Gym bit NULL,
CONSTRAINT PK_Rooms PRIMARY KEY
(
RoomNo
)
)
CREATE TABLE "Reservation"(
ReservationID int IDENTITY (1,1) NOT NULL,
CustomerID int NOT NULL,
FirstName nvarchar(20) NULL,
LastName nvarchar(20) NULL,
RoomType nvarchar(20) NULL,
RoomNo int NOT NULL,
CheckInDate date NULL,
CheckOutDate date NULL,
CONSTRAINT PK_Reservation PRIMARY KEY
(
ReservationID
),
CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY
(
CustomerID
)
REFERENCES dbo.Customers
(
CustomerID
),
CONSTRAINT FK_Reservation_Customers_FrstNme FOREIGN KEY
(
FirstName
)
REFERENCES dbo.Customers
(
FirstName
)
)
¿Podría alguien decirme qué está pasando aquí y cómo puedo solucionarlo? El mismo problema ocurre con todas las otras claves que quiero hacer una clave externa. Excepto si quiero hacer referencia a una clave primaria.
Me encontré con este error al especificar columnas de clave en la tabla de referencia que estaban fuera del mismo orden en que se definió la clave principal o la clave candidata en la tabla de referencia.
Cambiando el orden en que se especificaron las columnas lo solucionó.
Ex:
ALTER TABLE [dbo].[MCL_item_vendor_override_mst] WITH CHECK ADD
CONSTRAINT [FK_MCL_item_vendor_override_mst_item_mst] FOREIGN KEY([item],[site_ref])
REFERENCES [dbo].[item_mst] ([item],[site_ref])
fallado mientras
ALTER TABLE [dbo].[MCL_item_vendor_override_mst] WITH CHECK ADD
CONSTRAINT [FK_MCL_item_vendor_override_mst_item_mst] FOREIGN KEY([site_ref],[item])
REFERENCES [dbo].[item_mst] ([site_ref],[item])
trabajó.
Si desea crear una clave externa, debe hacer referencia a la clave principal o a un campo con una restricción única.
Si desea mostrar el nombre del cliente, haga que la clave externa haga referencia al CustomerID y muestre los resultados con una combinación.