如何在SQL Server中将标识列设置为创建表

zey*_*zey 11 sql-server sql-server-2008-r2

我在SQL Server中创建了一个表,如下所示:

CREATE TABLE [UserName]
(
   [ID] [int] NOT NULL ,
   [Name] [nvarchar] (50) NOT NULL ,
   [Address] [nvarchar] (200) NULL

   CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

如果我想创建ID一个标识列,我需要什么?我是否需要删除并创建此表并设置ID[ID] [int] IDENTITY(1,1) NOT NULL.

通过使用drop和create,UserName表中的所有数据都将丢失.

有另一种方式来设置IDENTITY COLUMN,以创建表的列,而不会丢失数据?

我使用的是SQL Server 2008 R2 :)

a_h*_*ame 14

ALTER TABLE [UserName] DROP COLUMN [ID];

ALTER TABLE [UserName] 
    ADD [ID] integer identity not null;
Run Code Online (Sandbox Code Playgroud)

  • @Phil:不,不是"所有数据".只有现有`ID`列的值.如果表被其他表引用,那么确实可能存在问题. (3认同)
  • 这将创建列,但所有数据仍然会丢失 (2认同)
  • 我的意思是专栏中的“所有数据” - 但感谢您的澄清 (2认同)

Dev*_*art 5

试试这个-

DECLARE @temp TABLE
(
      ID INT NOT NULL 
    , Name NVARCHAR(50) NOT NULL 
    , [Address] NVARCHAR(200) NULL
) 

INSERT INTO @temp (ID, Name, [Address])
SELECT ID, Name, [Address]
FROM dbo.UserName

DROP TABLE dbo.UserName

CREATE TABLE dbo.UserName
(
      [ID] [int] IDENTITY(1,1) NOT NULL 
    , [Name] [nvarchar] (50) NOT NULL 
    , [Address] [nvarchar] (200) NULL
CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED 
([ID] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

SET IDENTITY_INSERT dbo.UserName ON

INSERT INTO dbo.UserName (ID, Name, [Address])
SELECT ID, Name, [Address] 
FROM @temp

SET IDENTITY_INSERT dbo.UserName OFF
Run Code Online (Sandbox Code Playgroud)

  • 使用`temp`表,那是一个不错的选择! (2认同)

Sud*_*A R 5

最简单的方法:

  1. 右键单击对象资源管理器中的表,然后选择“设计”
  2. 选择要为其设置标识的列,然后转到“列属性”
  3. 在“身份规范”下,将“身份”更改为“是”
  4. 单击保存...。完成:)

希望这可以帮助