sql-server – 在外键列中设置空值?
我有这个表
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 ) ) 和另一张桌子 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] 你可以看到,CityId,BranchId有一个外键.我遇到的问题是,如果用户没有进入他的城市(他可以选择不这样做,这个字段不是强制性的,那么CityId将是空白的,当我尝试在CustomerMaster表中插入这个值时,我得到这个错误说 INSERT语句与FOREIGN KEY约束“fk_cdCityId_CityId”冲突.冲突发生在数据库“TestDatabase”中,表“dbo.CityMaster”. 所以,我想知道一个方法来规避这个.我知道一个唯一或主键列是否被引用为外键,它不能为空.但是,当我设置的时候,时间呢? 解决方法如果CityId设置为NULL,那么外键约束将不被检查,一切都会很好.另一方面,如果CityId为0(例如,因为您已经指定了DEFAULT((0))…),并且CityMaster中没有匹配的行为0,BranchId,那么这将确实导致约束检查失败. 只有在涉及的所有列都为非NULL时,才会检查复合键上的外键约束. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 使用窗口函数的日期范围滚动总和
- .net – 使用编译查询时,还需要存储过程吗?
- 关于ADO 连接 SQLServer的事务处理。
- sql-server – 什么是更好的 – 将可选参数添加到现有SP或添
- sql-server – 如何使用ASP Classic加密和解密SQL Server数
- SQL在顶部有一个特定记录,下面是其他所有记录
- 记一次成功的sql注入入侵检测附带sql性能优化
- 第四章——SQLServer2008-2012资源及性能监控(2) .
- sql – Oracle – 如何从VARRAY读取
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FR