【问题标题】:Why do you get "Saving changes is not permitted" when changing the length of an nvchar column in SQL?为什么在 SQL 中更改 nvchar 列的长度时出现“不允许保存更改”?
【发布时间】:2021-05-07 15:21:30
【问题描述】:

据此:

Microsoft description of how SQL works

当您进行以下一项或多项更改时,会出现此问题 到表:您更改列的允许 Nulls 设置。你 重新排序表中的列。您更改列数据类型。你加 一个新的列。您更改表的文件组或其文本/图像 数据。

我尝试将列上的 nvchar 的最大长度从 25 更改为 100,但它不会让我保存它。

它根本没有被列为应该出现此错误的条件之一。

谁能告诉我为什么 SSMS 18 对我这样做?

【问题讨论】:

  • 您正在运行什么 SQL 以获取此错误?更改字符串列的长度(更长的长度)通常不会被阻止;除非该列被用作外键候选。
  • 我刚刚进入设计器并将其从 25 更改为 100 并告诉它保存。当我尝试使用查询更改它时,它会显示: Msg 5074, Level 16, State 1, Line 1 对象'SSMA_CC$Table$City$disallow_zero_length' 取决于列'City'。消息 4922,级别 16,状态 9,第 1 行 ALTER TABLE ALTER COLUMN City 失败,因为一个或多个对象访问此列。
  • 不要使用设计器。 ALTER专栏。
  • 嗯,你去吧,@ZCT,有依赖关系;正如我在原始评论中提到的那样。您需要 DROP 那些依赖项,ALTER 列,然后重新创建它们。

标签: sql-server ssms


【解决方案1】:
  1. 检查依赖项(即外键)

  2. 例如使用 ALTER

    创建表 [dbo].[Test]( [aaa] nchar NULL) ON [PRIMARY] GO

    ALTER TABLE 测试 ALTER COLUMN aaa NCHAR(100)

就数据库对象而言,SSMS 非常古怪。

【讨论】:

    【解决方案2】:

    您链接到的文章解释了问题所在

    SSMS 具有内置的保护措施,可防止您保存更改其脚本将删除并重新创建表的位置。

    有时 SSMS 可能过于谨慎,甚至没有必要。

    您可以(并且可能应该)直接使用alter table 语法,但是您可以通过以下方式在 SSMS 中禁用此行为:

    tools > options > Designers > Table and Database Desingners

    然后取消勾选选项Prevent saving changes that require table re-creation

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2016-08-10
      • 2023-03-06
      相关资源
      最近更新 更多