12

我在 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

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

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

是否有另一种方法可以设置IDENTITY COLUMNcreated table的列而不会丢失数据?

我使用 SQL Server 2008 R2 :)

4

4 回答 4

15
ALTER TABLE [UserName] DROP COLUMN [ID];

ALTER TABLE [UserName] 
    ADD [ID] integer identity not null;
于 2013-04-24T09:28:10.077 回答
6

试试这个——

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
于 2013-04-24T09:31:45.950 回答
5

最简单的方法:-

  1. 右键单击对象资源管理器中的表并选择“设计”

  2. 选择要为其设置标识的列,然后转到列属性

  3. 在“身份规范”下将“(是身份)”更改为“是”

  4. 单击Save....完成:)

    在此处输入图像描述

希望这可以帮助

于 2014-07-30T10:33:17.893 回答
0

这是一个最少记录的解决方案。

SELECT 
    IDENTITY(INT, 1,1) AS ID,
    Name, [Address]
INTO dbo.UserName_temp
FROM dbo.UserName;


ALTER TABLE dbo.UserName_temp
    ADD CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED;

DROP TABLE dbo.UserName;

EXEC sp_rename 'dbo.UserName_temp', 'UserName';

SRC: http ://sqlmag.com/sql-server/appending-identity-column-temporary-table

但是 IDENTITY() 函数“只能在带有 INTO 表子句的 SELECT 语句中”。

http://msdn.microsoft.com/en-us/library/ms189838.aspx

于 2014-08-15T20:19:03.690 回答