2011-02-05 5 views
0

Использование SQL ServerAuto Increment Проблема

Table1

ID Name 

001 Raja 
002 Ravi 
003 Suresh 
004 Kamal 
... 

Мне нужно создать новую таблицу и сделать идентификатор для каждого столбца

Пробовал запроса

insert into table2 
    select * from table1 

Ожидаемый выходной

S.No ID Name 

1 001 Raja 
2 002 Ravi 
3 003 Suresh 
4 004 Kamal 
... 

Я создаю новую таблицу и сделаю столбец S.No идентичным в таблице. Он создает идентификационный номер для каждой строки, затем я удаляю всю строку, снова вставленную, но идентификация создается из последней строки следующего числа вперед.

Пример

S.No ID Name 

    1 001 Raja 
    2 002 Ravi 
    3 003 Suresh 
    4 004 Kamal 
    ... 

Удалить все строки, снова я вставил.

S.No ID Name 

    5 001 Raja 
    6 002 Ravi 
    7 003 Suresh 
    8 004 Kamal 
    ... 

Ожидаемый результат

Идентичность должна начинаться с номера 1 года, когда я удалить все строки из таблицы.

Нужна помощь по запросу

ответ

4

Это не то, как работает идентичность. Удаление содержимого не приведет к сбросу поля идентификации. Вы должны его повторить:

DBCC CHECKIDENT (‘databasename.dbo.yourtable’,RESEED, 0) -- will start from 1 
+0

Спасибо за ваш ответ, как написать удалить с упомянутым запросом. В настоящее время я пишу delete * из таблицы2, так вот как я могу вставить ваш упомянутый запрос. – Gopal

+0

@Gopal: вам понадобится запрос, содержащий ** два утверждения ** - сначала ваш 'delete * from table2' и следующий' DBCC CHECKIDENT (....., RESEED, 0) '- одно заявление после прочее –

+0

@marc_s да, вы сделаете. Я подумал, что пересадка была сложнее, поэтому я только упомянул об этом. – alex

2

Или просто усечь стол? Это также приведет к сбросу первичного ключа.
(marc_s: на самом деле, это IDENTITY значение, что это сброс)

TRUNCATE TABLE tablename 
+0

Таблица усечений означает, что он удалит таблицы данных или таблицу – Gopal

+0

Не таблица, просто данные - но это то, что вы хотите, не так ли? Удаление данных и сброс счетчика автоматического увеличения? – Marc

+0

TRUNCATE на самом деле не «перезагружает первичный ключ» - то, что он сбросит, счетчик IDENTITY - добавил комментарий к вашему сообщению, чтобы уточнить –

0

Если вы хотите столбец S.No имеет автоматический инкремент и это значение имеет (Maximum No + 1)

так вы можете создать скалярную функцию, чтобы найти это значение, и установить столбец DefaultValue для этой функции и установить идентификатор false.

Посмотрите этот пример:

CREATE FUNCTION [dbo].[getmaxno]() 
RETURNS int 
AS 
BEGIN 
    DECLARE @ResultVar int 
    SELECT @ResultVar = MAX(no)+1 from dbo.table_1 
    RETURN @ResultVar 
END 

ALTER TABLE [dbo].[Table_1] ADD CONSTRAINT [DF_Table_1_no] DEFAULT ([dbo].[getmaxno]()) FOR [no]