que tienen esta tabla¿establecer el valor nulo en una columna de clave externa?
CREATE TABLE [dbo].[CityMaster](
[CityID] [int] NOT NULL,
[City] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[BranchId] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF__CityM__Branc__74444068] DEFAULT ((0)),
[ExternalBranchId] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_CityMaster] PRIMARY KEY CLUSTERED
(
[City] ASC,
[BranchId] ASC
),
CONSTRAINT [uk_citymaster_cityid_branchid] UNIQUE NONCLUSTERED
(
[CityID] ASC,
[BranchId] ASC
)
)
y otra mesa
CREATE TABLE [dbo].[CustomerMaster](
[ID] [int] NOT NULL,
[CustomerCode] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CustomerName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CustomerAddress] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CustomerPhone] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[CustomerEmailId] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[CustomerPriority] [int] NOT NULL CONSTRAINT [DF_CustomerMaster_CustomerPriority] DEFAULT ((0)),
[CustomerRegisterDate] [datetime] NULL,
[CustomerIsActive] [bit] NULL CONSTRAINT [DF_CustomerMaster_CustomerIsActive] DEFAULT ((1)),
[BranchId] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF__CustomerM__Branc__67DE6983] DEFAULT ((0)),
[CityId] [int] NULL CONSTRAINT [DF_CustomerMaster_CityId] DEFAULT ((0)),
CONSTRAINT [PK_CustomerMaster] PRIMARY KEY CLUSTERED
(
[CustomerCode] ASC,
[BranchId] ASC
)
) ON [PRIMARY]
ALTER TABLE [dbo].[CustomerMaster] WITH CHECK ADD CONSTRAINT [fk_cdCityId_CityId] FOREIGN KEY([CityId], [BranchId])
REFERENCES [dbo].[CityMaster] ([CityID], [BranchId])
ALTER TABLE [dbo].[CustomerMaster] CHECK CONSTRAINT [fk_cdCityId_CityId]
Como se puede ver, hay una clave externa en CityId, BranchId
. El problema que tengo es que si un usuario no ingresa a su ciudad (puede optar por no hacerlo, este campo no es obligatorio, entonces el CityId
estaría en blanco y cuando intento insertar este valor en la tabla CustomerMaster
, entiendo esto error diciendo
la sentencia INSERT en conflicto con la restricción FOREIGN KEY "fk_cdCityId_CityId". se ha producido el conflicto en la base de datos "TestDatabase", tabla "dbo.CityMaster". la instrucción se ha terminado.
por lo tanto, Quiero saber cómo evadir esto. Sé que si se hace referencia a una columna clave única o principal como una clave externa, no puede ser nula. Pero, ¿qué pasa con los tiempos, cuando configuré?on delete set null
? En ese caso, si esa fila se elimina de CityMaster
se establecería en null
en CustomerMaster
(me refiero a todas sus referencias). Entonces, si eso es posible, ¿por qué y cómo puedo configurar el valor en esta clave externa null
manualmente? Y si eso no es posible de ninguna manera, ¿cuál es la mejor manera de eludir la situación que describí?
@ damien-the-unbeliever: Entonces, ¿debería eliminar esta cláusula 'default (0)'? – Razort4x
@ Razort4x - Yo diría que sí. –
bueno, no me ayudó –