2013-04-24 2 views
7

Я создал таблицу в SQL Server, как это:Как установить столбец идентификации созданной таблицы в сервере SQL

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 and create все данные из таблицы UserName теряются.

Есть ли способ установить IDENTITY COLUMN на Создана таблица Ваша колонка без потерь?

Я использую SQL Server 2008 R2 :)

+3

Вы можете оставить только столбец - не вся таблица. Но вы ** не можете ** добавить спецификацию «IDENTITY» к существующему столбцу - это невозможно. –

+0

Использование ALTER TABLE? – zey

+0

@marc_s: хорошо, это имеет смысл. но есть ли более простой способ сделать это, если столбец ID моей таблицы уже используется как FK где-то еще? –

ответ

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

ALTER TABLE [UserName] 
    ADD [ID] integer identity not null; 
+0

Это создаст столбец, но все данные все равно будут потеряны. – Phil

+2

@Phil: no, not "all data". Только значения для существующего столбца «ID». Что действительно может быть проблемой, если на таблицу ссылаются другие таблицы. –

+0

Я имел в виду «Все данные» в столбце, но спасибо за разъяснение – Phil

4

Попробуйте один -

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 
+2

с использованием таблицы 'temp', это приятно! – zey

1

Самый простой способ: -

  1. правой кнопкой мыши на таблице в обозревателе объектов и выберите «Дизайн»
  2. Выберите столбец, для которого вы хотите установить личность и выберите Свойства Column
  3. Под изменением «Identity спецификация» «Является Идентичность» «Да»
  4. Нажмите кнопку Сохранить .... Готово :)

Надежда Это помогает

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() может "Только в ЗЕЬЕСТЕ с п в таблице"

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

Смежные вопросы