在外键列中设置空值?

2024-04-20

我有这张桌子

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”中。 该语句已终止。

所以,我想知道一种方法来规避这个问题。我知道如果唯一或主键列被引用为外键,它不能为空。但是,当我设定的时候呢?on delete set null?在这种情况下,如果该行被删除CityMaster它将被设置为null in CustomerMaster(我的意思是它的所有参考文献)。所以,如果可能的话,为什么以及如何设置这个外键中的值null手动? 如果这无论如何都不可能,那么避免我所描述的情况的最佳方法是什么?


If CityId被设定为NULL,那么外键约束就不会被检查,一切都会好的。

另一方面,如果CityId是 0 (比如说,因为你已经指定DEFAULT ((0))上...),并且没有匹配的行CityMaster for 0,BranchId,那么这确实会导致约束检查失败。

仅在以下情况下才检查复合键上的外键约束:all所涉及的列是非NULL.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在外键列中设置空值? 的相关文章

  • 如何用NULL替换空格

    我在 sql server 2012 中有一个包含空格的列 我想用 NULL 替换这些空白 我已经编写了以下查询 但它不起作用 SELECT replace COLUMN1 NULL FROM Orders 如何实现上述功能 提前致谢 Us
  • 修改SQL Server中的默认值

    我正在尝试使用 SQL Server 2008 中的 SQL 语句更改列的默认值 我在很多地方找到了如何在创建表 添加列时设置默认值 但没有找到如何设置它 一旦列已经存在就修改它 这就是我可以用来在添加时设置它的内容 ALTER TABLE
  • SqlCommand返回值参数

    也许查看此代码的其他人能够告诉我为什么 returnID 始终为 0 我正在尝试从插入的记录中检索新的 ID public int AddToInventory int PartID int QtyOnHand int SpokenFor
  • MySQL CREATE TABLE 语句上的外键错误(错误:150)

    我觉得我已经在一对非常简单的创建表语句上尝试了一切可能的方法 类型匹配 我尝试使用 ENGINE InnoDB 等 但很困惑为什么我收到外键错误 我已经离开 SQL 一段时间了 所以这可能是一个简单的问题 mysql gt CREATE T
  • 出错时退出并回滚脚本中的所有内容

    我有一个 TSQL 脚本 它可以进行大量数据库结构调整 但在出现故障时让它继续执行并不真正安全 把事情说清楚 使用 MS SQL 2005 它不是一个存储过程 只是一个脚本文件 sql 我所拥有的按以下顺序排列 BEGIN TRANSACT
  • 从 PHP 执行 SQL Server 存储过程

    我尝试从 PHP 调用 SQL Server 存储过程 这是我的存储过程 CREATE procedure dbo tester id NVARCHAR MAX AS BEGIN DECLARE tab TABLE myxml XML IN
  • 如何在 mysql 或 JDBC 的表中自动插入外键引用?

    我正在使用MySQL 我的问题是如何自动将新添加的行插入外键表中 一个例子可以澄清我的问题 我有两个表 员工 和 薪水 CREATE TABLE Employee emp id int NOT NULL AUTO INCREMENT nam
  • 带附件的数据库电子邮件(excel 文件/pdf 文件)?

    我必须从数据库向我的邮件 ID 发送一封带有附件的邮件 EXEC msdb dbo sp send dbmail profile name Adventure Works Administrator recipients email pro
  • 区分大小写变得疯狂

    我有一个数据库 我正在尝试执行以下查询 SELECT COUNT FROM Resource WHERE Name LIKE ChinaApp SELECT COUNT FROM Resource WHERE Name LIKE China
  • SQL Server 数据库中的表具有互斥外键的最佳实践

    在这里 我正在寻找针对以下问题的优缺点的最佳解决方案 Entity1 E1 pk 与其他不同的列 Entity2 E2 pk 与其他不同的列 Entity3 E3 pk 与其他不同的列 我需要创建之间的关系Entity1 and Entit
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec
  • SQL查询多行变成单行

    有什么方法可以将通常返回具有相同值的多行的 SQL 查询更改为单行吗 例如 如果我现有的查询返回以下内容 ColA ColB 1 AA 1 BB 1 CC 2 AA 3 AA 我可以将查询更改为仅返回 3 行 并将 1 的第二个和第三个结果
  • 如何授予用户访问 SQL Server 中的 sys.master_files 的权限?

    我需要授予数据库用户读取权限sys master files桌子 我怎样才能做到这一点 目前用户拥有以下权限 Calling SELECT on sys master files返回空结果 我还使用以下命令测试了相同的查询sa用户按预期工作
  • C# 事务中的事务

    我正在使用 C 将发票的平面文件导入到数据库中 如果遇到问题 我将使用 TransactionScope 回滚整个操作 这是一个棘手的输入文件 因为一行不一定等于一条记录 它还包括链接记录 发票将包含标题行 行项目和总计行 有些发票需要跳过
  • AWS DMS 无法截断 SQL 事务日志

    我们正在运行 AWS DMS 以 SQL 作为源 以 DynamoDB 作为目标 我们很难截断事务日志 我们看到每个 AWS DMS 有 2 个 SQL 任务 如下所示 begin transaction WVGLQ7HFWFWJCCPK4
  • 如何将 UILabel 与个人资料照片图像水平对齐?

    我必须显示名称和电子邮件 ID 与个人资料图像正确水平对齐 这样姓名和电子邮件 ID 就出现在 UIImageView 的中心 但您可以看到姓名和电子邮件 ID 不在个人资料图片的中心 为什么会发生这种情况 我给出了以下限制 删除前导和尾随
  • SQL分组和总结

    我的表如下所示 income date productid invoiceid customerid 300 2015 01 01 A 1234551 1 300 2016 01 02 A 1234552 1 300 2016 01 03
  • 动态/条件 SQL 连接?

    我在 MSSQL 表 TableB 中有数据 其中 dbo tableB myColumn 在特定日期后更改格式 我正在做一个简单的连接到该表 Select dbo tableB theColumnINeed from dbo tableA
  • 显示多个表的账户余额

    我有以下两个表 其中存储有关贷记和借记记录的信息 couponCr 表包含 voucherType voucherPrefix voucherNo crparty cramount SALES S 1 1 43000 SALES S 2 1
  • 动态SQL生成列名?

    我有一个查询 我正在尝试将行值转换为列名称 目前我正在使用SUM Case As ColumnName 声明 像这样 SELECT SKU1 SUM Case When Sku2 157 Then Quantity Else 0 End A

随机推荐

  • Symfony2:检查会话是否存在

    有没有办法检查会话是否存在 我尝试过这种方法 但它总是给我一个 太棒了 回答 session this gt getRequest gt hasPreviousSession if session return new Response B
  • 无法展开 RemoteView

    我尝试创建自定义通知 但出现以下异常 FATAL EXCEPTION main android app RemoteServiceException Bad notification posted from package com my a
  • 是否可以禁用 MVC 控制器中一项操作的授权?

    我在控制器上有一个授权属性 但我想通过一个操作将其关闭 我创建了自己的授权过滤器并将 匿名 添加到角色列表中 在我的过滤器中 如果 Anonymous 出现在角色列表中 我将返回 true 然而 它似乎并没有通过登录页面 就好像控制器授权抢
  • 将 UTF-16 转换为 UTF-8 并删除 BOM?

    我们有一位数据输入人员在 Windows 上使用 UTF 16 编码 希望使用 utf 8 并删除 BOM utf 8 转换有效 但 BOM 仍然存在 我该如何删除这个 这就是我目前所拥有的 batch 3 src Users jt src
  • Angular 2 格式化货币 BRL 格式

    我正在尝试使用管道以 PT BR 货币格式格式化商品的价格 这是我想做的 div class desc statement price currency BRL true 1 2 2 div 我期望的结果是 33 111 00 现在返回 3
  • Cartopy:无法绘制具有不确定性的向量场(以及相关问题)

    我已经尝试在 Cartopy 中绘制带有不确定性椭圆的矢量场有一段时间了 这个想法是 如果我有一个位置 纬度 经度 和一个向量 例如风速 但该向量具有不确定性 例如以标准差测量 那么我想绘制一个椭圆周围的箭头表示不确定性 在格林尼治标准时间
  • regexp_extract适用于多种模式吗?-Spark sql

    模式 1 由 分隔 Input a b c d Output a b c d 当用单个管道分隔时选择所有内容 模式 2 由 分隔和 示例1 Input a b c d Output a b c 选择最后一个双管之前的所有内容 示例2 Inp
  • 为什么 OSX 将 atoi/atof 记录为不是线程安全的?

    我知道 strtol 和 strtof 比 atoi atof 更受青睐 因为前者检测错误 而且在非基数 10 方面 strtol 比 atoi 灵活得多 但我仍然对一些事情感到好奇 OS X 上的 man atoi 或 atof 尽管不在
  • 通过 Java 企业代理的 Twilio SMS 呼叫失败并出现以下错误

    按照 Twilio 网站中的步骤操作 参考链接 https www twilio com docs libraries java custom http clients java https www twilio com docs libr
  • 在 Bash 中,如何将“Are you certain [Y/n]”添加到任何命令或别名中?

    在这种特殊情况下 我想在 Bash 中添加一个确认 Are you sure Y n 对于 Mercurial 来说hg push ssh email protected cdn cgi l email protection somepat
  • 查明设备是否进行了全盘加密以及使用了什么加密?

    由于支持 Android 3 0 全盘加密 但我看不到任何支持该功能的 API 我需要知道的两件事是 设备是否加密 使用什么加密方式 我找到了一个低层次的解释在这里处理 http source android com tech encryp
  • 测试代码覆盖 javascript es6 生成器 (redux-saga / istanbul.js)

    我使用 redux saga 编写了一些测试 我尝试使用 istanbul js 生成代码覆盖率 它对于大多数代码都工作得很好 但是传奇的结果被破坏了 看起来像是随机信息 有人知道如何解决这个问题吗 我个人使用 Jest 它包括代码覆盖率
  • 获取存储库的当前版本

    我是 GIT 新手 但我不知道如何 获取存储库的版本 文件夹离线 获取存储库的最新版本 在线 我只能比较两者 但它没有给我任何有关版本的信息 git status 只需告诉我它是最新的 我怎样才能有这样的东西 Your version 1
  • 如何在按下 UIButton 时获取其标题

    我试图找出在以下代码中按下 UIButton 的 UIButton 标题是什么 在 viewDidLoad 上 按钮标题使用以下命令输出到控制台 NSLog The button title is btn titleLabel text 我
  • Presto SQL 窗口聚合回顾 x 小时/分钟/秒

    我想通过回顾 x 小时 分钟 秒前来对 presto sql 进行聚合 Data id timestamp status A 2018 01 01 03 00 00 GOOD A 2018 01 01 04 00 00 BAD A 2018
  • C++ PyImport 的 Python 覆盖率

    情况 我正在尝试获取当前项目中所有 python 代码的覆盖率报告 我在很大程度上使用 Coverage py 并取得了巨大成功 目前我正在使用它this https coverage readthedocs io en v4 5 x su
  • Matplotlib 动画:如何动态扩展 x 限制?

    我有一个简单的动画情节 如下所示 import numpy as np from matplotlib import pyplot as plt from matplotlib import animation First set up t
  • 在 cassandra 中将 json 存储为文本与 blob 相比有何优缺点?

    对于我来说 blob 的一个问题是 在 java 中 ByteBuffer 在 cassandra 中映射到 blob 不是可序列化的 因此不能很好地与 EJB 配合使用 考虑到 json 相当大 在 cassandra 中存储 json
  • setStatusBarStyle:animated: 已弃用

    我目前正在开发一个应用程序 在 Swift 3 中 Xcode 8 beta for iOS 10 我想要实现的是在运行时更改视图控制器内的状态栏样式 以将主题从白天主题更改为夜间主题 我发现我过去开发另一个应用程序时使用的方法已被弃用 如
  • 在外键列中设置空值?

    我有这张桌子 CREATE TABLE dbo CityMaster CityID int NOT NULL City varchar 100 COLLATE SQL Latin1 General CP1 CI AS NOT NULL Br