【问题标题】:T-SQL inserting data into table with foreign keyT-SQL使用外键将数据插入表中
【发布时间】:2017-04-11 10:36:10
【问题描述】:

我正在使用 SQL Server 2014 创建数据并将数据插入表中,但在使用外键约束填充表时遇到了问题。我有一个表 user 和一个表 city,它们是预先创建的。

我使用代码更改了user 表,以包含来自city 表的cityId 外键,代码如下:

ALTER TABLE [Schema].[user]
    ADD cityId UNIQUEIDENTIFIER NOT NULL            
    CONSTRAINT usr_cid_fk 
    FOREIGN KEY (cityId) REFERENCES [Schema].[city] (cityId);
GO  

基本上,我通过添加一个名为cityId 的字段来修改用户表,我创建了外键。现在的问题是,在插入数据时,在第一行

 INSERT INTO [Schema].[user](name, surname, dob, gender, .. ) 

cityId 找不到被映射。不知道为什么不显示。在设计视图中,它被列为外键,因此应该没有问题。

非常感谢

【问题讨论】:

  • City 表是空的吗?
  • City 填满了几条数据,成功了
  • 检查 Alter statment 上的 cityid 类型 - Number Not null
  • “cityId 找不到映射” - 错误信息是什么?
  • 它只是没有作为用户表中的字段出现在智能许可证中

标签: sql-server foreign-keys alter-table


【解决方案1】:

试试:

ALTER TABLE [Schema].[user]
ADD cityId NUMBER NOT NULL           
CONSTRAINT usr_cid_fk 
FOREIGN KEY (cityId) REFERENCES [Schema].[city] (cityId);

注意:

对于ADD cityId UNIQUEIDENTIFIER NOT NULL

根据 SQL 标准,外键必须引用父表的主键或唯一键。如果主键有多个列,则外键必须具有相同的列数和顺序。因此外键引用父表中的唯一行;不能有重复。

【讨论】:

  • atm 我有 CREATE TABLE [Schema].[city]( cityId UNIQUEIDENTIFIER CONSTRAINT cty_pk PRIMARY KEY DEFAULT NEWID() -- GUID - 全球唯一标识符,cityName NVARCHAR(256) NOT NULL CONSTRAINT cty_cn_un UNIQUE ) ;所以我也必须将城市的 id 设为数字数据类型,我猜对吗?
  • 身份字段应该是数字
猜你喜欢
  • 1970-01-01
  • 2021-09-15
  • 2018-08-07
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多