将表的IDENTITY设置为关闭

9

我有一张表,其中一个列(orderid)的IDENTITY属性已经设置为true。现在我想要关闭该属性。如何使用ALTER COLUMN命令来实现?类似于这样:

ALTER TABLE MyTable
ALTER Column MyColumn SET IDENTITY OFF

把这个链接留下来作为参考吧,因为我一直在寻找它: https://learn.microsoft.com/en-us/sql/t-sql/statements/set-identity-insert-transact-sql?view=sql-server-2017 - Maxim
3个回答

8
一旦身份列被设置,您就无法删除它或将其设置为OFF。您可能需要先将数据复制到其他列(不具有身份)中,然后才能删除该列。因此,您需要向表格添加一个新列,并将现有身份列的值复制到其中。然后删除旧列(带有身份),最后将新列重命名为旧列名称。

4
请注意,您实际上可以通过使用“设计”(在SSMS中右键单击表格)并打开“列属性”面板来将标识列更改为NO。 - Fraukje
@Fraukje 嗯,有点。这需要删除并重新创建表的权限,因为它将执行此操作。因此,您将失去表中的任何数据。 - Kristen Hammack

7

你需要使用 SET IDENTITY_INSERT ON 命令。如果你将其设置为 ON,则应明确传递 ID 列的值。

为什么要关闭自增长?可能是因为你想传递一些显式的值。

请参考此处的示例演示。

-- Create tool table.
CREATE TABLE dbo.Tool
  (
     ID   INT IDENTITY NOT NULL PRIMARY KEY,
     NAME VARCHAR(40) NOT NULL
  );

GO

-- Inserting values into products table.
INSERT INTO dbo.Tool
            (NAME)
VALUES      ('Screwdriver'),
            ('Hammer'),
            ('Saw'),
            ('Shovel');

GO

-- Create a gap in the identity values.
DELETE dbo.Tool
WHERE  NAME = 'Saw';

GO

SELECT *
FROM   dbo.Tool;

GO

-- Try to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO dbo.Tool
            (ID,
             NAME)
VALUES      (3,
             'Garden shovel');

GO

-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.Tool ON;

GO

-- Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool
            (ID,
             NAME)
VALUES      (3,
             'Garden shovel');

GO

SELECT *
FROM   dbo.Tool;

GO

-- Drop products table.
DROP TABLE dbo.Tool;

GO 

5

您可以按照以下4个步骤来完成这项任务:

  1. 创建新列
  2. 将数据复制到该列
  3. 删除旧列
  4. 将新列重命名为旧列的名称

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接