在 SQL 服务器中将 is Identity 更改为 no 时出错
Error occurred while changing is Identity to no in SQL Server
我必须更改 ID 的自动递增以明确定义 ID。为此,我去
datatabse-> tables -> mytable -> 设计。我在那里将身份(根据身份规范)设置为否。但是当我单击保存时它会抛出一条错误消息。
Saving changes is not permitted. The changes you have made require the following tables to
be droped and re created....
有没有什么办法可以不删除 table。我搜索了这个错误并找到了 运行 以下查询
的解决方案
SET IDENTITY_INSERT mytable ON GO
但是当我尝试从代码插入时,它会抛出
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF
有什么办法可以解决这个问题
一次身份,永远身份。您不能更改列上的标识 属性。从技术上讲,您 可以 使用 IDENTITY_INSERT
来绕过它,但这需要在您执行的每个插入操作上设置该选项(此设置不会在会话期间持续存在)。这可能不是你想要的。
如果重新创建 table 不是一个选项,您唯一的选择是创建一个不是标识列的新列,然后删除旧列:
ALTER TABLE MyTable ADD NotAnID INT NULL;
GO
BEGIN TRANSACTION
UPDATE MyTable SET NotAnID = ID;
ALTER TABLE MyTable ALTER COLUMN NotAnID INT NOT NULL;
ALTER TABLE MyTable DROP COLUMN ID;
EXECUTE sp_rename 'MyTable.NotAnID', 'ID';
COMMIT;
这假设您的标识列是 NOT NULL
(通常是),ID
不是主键,它不参与外键约束,并且您想要新列取代旧列。
如果 ID
是 主键,则此练习会涉及更多,因为您需要删除主键约束并重新创建它——这有其自身的挑战.如果它也是聚集索引,那就加倍了。在这种情况下,您最好还是重新创建 table,因为重新创建聚簇索引意味着整个 table 被重写——这几乎肯定会中断生产工作,因此您不妨让 SSMS为你做艰苦的工作。为此,请转到工具 -> 选项 -> 设计器并取消选中 "Prevent saving changes that require table re-creation".
我必须更改 ID 的自动递增以明确定义 ID。为此,我去 datatabse-> tables -> mytable -> 设计。我在那里将身份(根据身份规范)设置为否。但是当我单击保存时它会抛出一条错误消息。
Saving changes is not permitted. The changes you have made require the following tables to
be droped and re created....
有没有什么办法可以不删除 table。我搜索了这个错误并找到了 运行 以下查询
的解决方案SET IDENTITY_INSERT mytable ON GO
但是当我尝试从代码插入时,它会抛出
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF
有什么办法可以解决这个问题
一次身份,永远身份。您不能更改列上的标识 属性。从技术上讲,您 可以 使用 IDENTITY_INSERT
来绕过它,但这需要在您执行的每个插入操作上设置该选项(此设置不会在会话期间持续存在)。这可能不是你想要的。
如果重新创建 table 不是一个选项,您唯一的选择是创建一个不是标识列的新列,然后删除旧列:
ALTER TABLE MyTable ADD NotAnID INT NULL;
GO
BEGIN TRANSACTION
UPDATE MyTable SET NotAnID = ID;
ALTER TABLE MyTable ALTER COLUMN NotAnID INT NOT NULL;
ALTER TABLE MyTable DROP COLUMN ID;
EXECUTE sp_rename 'MyTable.NotAnID', 'ID';
COMMIT;
这假设您的标识列是 NOT NULL
(通常是),ID
不是主键,它不参与外键约束,并且您想要新列取代旧列。
如果 ID
是 主键,则此练习会涉及更多,因为您需要删除主键约束并重新创建它——这有其自身的挑战.如果它也是聚集索引,那就加倍了。在这种情况下,您最好还是重新创建 table,因为重新创建聚簇索引意味着整个 table 被重写——这几乎肯定会中断生产工作,因此您不妨让 SSMS为你做艰苦的工作。为此,请转到工具 -> 选项 -> 设计器并取消选中 "Prevent saving changes that require table re-creation".