gpt4 book ai didi

SQL Server 2005 : Nullable Foreign Key Constraint

转载 作者:行者123 更新时间:2023-12-03 20:08:23 24 4
gpt4 key购买 nike

我在表 session 和用户之间有一个外键约束。具体来说,Sessions.UID = Users.ID。有时,我希望 Sessions.UID 为空。这可以允许吗?每当我尝试这样做时,我都会收到 FK 约束违规。

具体来说,我通过 LINQ 在 Sessions 中插入一行。我设置了 Session.User = null;我收到这个错误:
试图删除用户和 session 之间的关系。但是,关系的外键之一 (Session.UID) 不能设置为 null。

但是,当我删除将 User 属性设为 null 的行时,我在 SubmitChanges 行上收到此错误:
值不能为空。
参数名称:缺点

我的表都没有名为“cons”的字段,它也没有出现在我的 5,500 行 DataContext.designer.cs 文件中,也没有出现在任何相关对象的 QuickWatch 中,所以我不知道什么是“cons” .

在数据库中,Session.UID 是一个可为空的 int 字段,而 User.ID 是一个不可为空的 int。我想记录可能有也可能没有 UID 的 session ,我宁愿这样做而不禁用对该 FK 关系的约束。有没有办法做到这一点?

最佳答案

我似乎记得之前创建了一个可为空的 FK,所以我做了一个快速测试。正如你在下面看到的,它绝对是可行的(在 MSSQL 2005 上测试过)。

为表和约束的相关部分编写脚本并发布它们,以便我们可以进一步排除故障。

CREATE DATABASE [NullableFKTest]
GO
USE [NullableFKTest]
GO
CREATE TABLE OneTable
(
OneId [int] NOT NULL,
CONSTRAINT [PK_OneTable] PRIMARY KEY CLUSTERED
(
[OneId] ASC
)
)
CREATE TABLE ManyTable (ManyId [int] IDENTITY(1,1) NOT NULL, OneId [int] NULL)
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_ManyTable_OneTable]') AND parent_object_id = OBJECT_ID(N'[dbo].[ManyTable]') )
ALTER TABLE [dbo].[ManyTable] WITH CHECK ADD CONSTRAINT [FK_ManyTable_OneTable] FOREIGN KEY([OneId])
REFERENCES [dbo].[OneTable] ([OneId])
GO

--let's get a value in here
insert into OneTable(OneId) values(1)
select* from OneTable

--let's try creating a valid relationship to the FK table OneTable
insert into ManyTable(OneId) values (1) --fine
--now, let's try NULL
insert into ManyTable(OneId) values (NULL) --also fine
--how about a non-existent OneTable entry?
insert into ManyTable(OneId) values (5) --BOOM! - FK violation

select* from ManyTable
--1, 1
--2, NULL

--cleanup
ALTER TABLE ManyTable DROP CONSTRAINT FK_ManyTable_OneTable
GO
drop TABLE OneTable
GO
drop TABLE ManyTable
GO
USE [Master]
GO
DROP DATABASE NullableFKTest

关于SQL Server 2005 : Nullable Foreign Key Constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com