SQL SSMS:更改了 'allow nulls' 设计,现在无法切换回来(`无法将 NULL 值插入列中`)

SQL SSMS: changed 'allow nulls' design, now can't switch back (`cannot insert the value NULL into column`)

我在 SSMP.

的开发 SQL 数据库中工作

我们有一个结点 table、jnc_roles_users,它从两个查找 table 中提取值:lu_roleslu_users

最初,联结 table 中除一列外的所有列都选中了 Allow Nulls 复选框。然后我进入设计编辑器并选中所有框 - 收到警告这将影响两个查找 tables,并成功保存更改。

现在,我想切换回最初的 table 设计,即除了一列外什么都不允许空值。但是 SSMS 不再允许我取消选中其中一个字段的 Allow Nulls 框。具有讽刺意味的是,取消选中我们的 'ID' 主键没有问题。就是我们的'pseudo'主键'roleUserID'改不回来了。当我尝试取消选中 'Allow Nulls' 并保存时,我收到警报:

'jnc_roles_users' table - 无法修改 table.<br> 无法将值 NULL 插入列 'roleUserID'、table 'jnc_roles_users';列不允许空值。插入失败。 声明已终止。

这似乎有悖常理,因为该列目前停留在 'Allow Nulls',但此弹出窗口告诉我它不能接受空值。

lu_roles 和 lu_users 已成功保存,但 jnc_roles_users 未保存,这是唯一包含 'roleUserID'.

的 table

roleUserID 列在技术上不是主键 - 但我们正在考虑 'like' 一个,因为它确实采用我们设置的唯一值。出于某些原因,我们将此列视为一种主键 - 与不同位置的数据库备份以及常规 ID pk 如何在不同环境中错误复制有关,因此我们需要第二个伪 pk roleUserID.

有什么想法吗?

您可以尝试使用 ALTER TABLE -

ALTER TABLE jnc_role_users
ALTER COLUMN roleUserID NVARCHAR(50) NOT NULL

将 NVARCHAR(50) 更改为 roleUserID 列使用的数据类型

很可能是在您更改设计器中的 Allow NULL 和您将其改回之前 table 中添加了一些具有 NULL 值的新数据。