更改表以将IDENTITY设置为off

时间:2016-01-06 09:09:48

标签: sql tsql sql-server-2012

我有一个表,它有一个列(orderid),其IDENTITY设置为true。现在我想把它关掉。我怎么能用ALTER COLUMN做到这一点?有点像这样吗?

ALTER TABLE MyTable
ALTER Column MyColumn SET IDENTITY OFF

3 个答案:

答案 0 :(得分:8)

设置标识列后,无法删除,或者您无法将其设置为OFF。

您可能必须首先将数据复制到其他列(没有标识)中以删除列。所以这就像添加一个新列 到您的表并将现有标识列的值复制到它。然后删除旧列(具有标识),最后将新列重命名为旧列名。

答案 1 :(得分:7)

您必须使用SET IDENTITY_INSERT TO 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 

答案 2 :(得分:5)

您可以分4个步骤

完成此操作
  1. 制作新专栏
  2. 将数据复制到该列
  3. 删除旧列
  4. 将新列重命名为旧列