代码之家  ›  专栏  ›  技术社区  ›  Kyle Vassella

SQL SSMS:已更改“允许空值”设计,现在无法切换回(`cannot insert the value NULL into column`)

  •  0
  • Kyle Vassella  · 技术社区  · 6 年前

    我在一个dev sql database within ssmp

    我们有一个连接表, jnc_Roles_Users ,它从两个查找表中提取值: lu_Roles lu_Users

    最初,连接表中除了一列以外的所有列都选中了 allow nulls checkbox。然后,我进入设计编辑器并选中所有的框-得到通知,这将影响两个查找表,并成功保存更改。

    现在,我想切换回原来的表设计,只允许一列之外的空值。但是SSMS不再允许我取消选中其中一个字段的 allow nulls box。具有讽刺意味的是,取消选中我们的“id”主键没问题。这是我们的“伪”主键“roleuserid”,我不能更改回去。当我尝试取消选中“允许空值”并保存时,我会收到警报:

    'jnc_roles_users'表 -无法修改表。
    无法将值空值插入列“roleuserid”,表“jnc_roles_users”;列不允许空值。插入失败。 语句已终止。

    这看起来有点违反直觉,因为列当前停留在“allow nulls”位置,但弹出窗口告诉我它不能接受nulls。

    已成功保存lu_角色和lu_用户,但jnc_角色_用户不是唯一包含“roleuserid”的表。

    从技术上讲, roleuserid 列不是主键,但我们认为它“像”一个,因为它采用我们设置的唯一值。出于某些原因,我们将此列视为一种主键-在不同位置执行数据库备份以及在不同环境中如何正确复制常规ID pk,因此我们需要第二个伪pk(属于 roleuserid)

    有什么想法吗?[答:] .

    最初,连接表中除了一列以外的所有列 Allow Nulls 复选框选中。然后,我进入设计编辑器并选中所有的框-得到通知,这将影响两个查找表,并成功保存更改。

    现在,我想切换回原来的表设计,只允许一列之外的空值。但是SSMS不再允许我取消选中 允许空值 其中一个字段的框。具有讽刺意味的是,取消选中我们的“id”主键没问题。这是我们的“伪”主键“roleuserid”,我不能更改回去。当我尝试取消选中“允许空值”并保存时,我会收到警报:

    'jnc_roles_users'表 -无法修改表。
    无法将值空值插入列“roleuserid”,表“jnc_roles_users”;列不允许空值。插入失败。 语句已终止。

    这看起来有点违反直觉,因为列当前停留在“allow nulls”(允许空值),但弹出窗口告诉我它不能接受空值。

    已成功保存lu_角色和lu_用户,但jnc_角色_用户不是唯一包含“roleuserid”的表。

    这个 roleUserID 从技术上讲,列不是主键,但我们认为它“像”一个,因为它采用了我们设置的唯一值。出于某些原因,我们将此列视为一种主键-在不同位置执行数据库备份以及在不同环境中如何错误地复制常规ID pk,因此我们需要第二个 罗勒赛德 .

    有什么想法吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   HardCode    6 年前

    很可能是在设计器中更改allow NULL的时间和您再次更改它的时间之间,向表中添加了一些具有空值的新数据。

        2
  •  0
  •   Mary Scheuller    6 年前

    您可以尝试使用alter table-

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

    将nvarchar(50)更改为roleuserid列使用的数据类型