2015-07-30 4 views
3

создать таблицу:Как изменить инструкцию автоматического инкремента в SQL Server?

create table empty 
(
    data_id int identity(70,30), 
    emp_name varchar(20), 
    address varchar(20), 
    city varchar(20) 
) 

и вставить данные, такие как:

data_id emp_name  address  city 
--------------------------------------------- 
70  ritesh  210 b_block  sivapur 
100  pritma  visvaas khand lucknow 
130  rakesh  nehru nagar  delhi 

Теперь я хочу, чтобы изменить автоматическое приращение от (70, 30) к (70, 10).

Могу ли я это сделать?

+0

Использование 'identity' предполагает, что вы используете SQL Server, а не MySQL, поэтому я удалил тег для последнего. –

+1

переименовать существующую таблицу. создайте новую таблицу с тем же именем, что и старое, с новым семенем. вставьте данные из старой таблицы в новую, используя SET IDENTITY_INSERT ON, чтобы сохранились существующие ключи. – Jeremy

+0

Как только столбец определяется как «IDENTITY», вы не можете его изменить. Также вы не можете добавить спецификацию «IDENTITY» к существующему столбцу (или удалить его из столбца). –

ответ

-1

Создать новый столбец с именем data_id_New.

ALTER TABLE empty ADD data_id_New int; 

Теперь копируем все значения data_id в data_id_New.

Update empty set data_id_New = data_id 

Теперь удалите столбец.

ALTER TABLE empty DROP COLUMN data_id; 

Переименовать столбец data_id_New в data_id.

ALTER TABLE empty RENAME COLUMN data_id_new to data_id; 

Наконец измените новый столбец

ALTER TABLE empty MODIFY data_id int identity(70,10); 

Надежда, это решит вашу проблему.

+1

Вы ** не можете ** (в SQL Server) использовать 'ALTER TABLE .. MODIFY' - команда' ALTER TABLE .... ALTER COLUMN', но даже с правильный синтаксис, вы не можете ** добавить спецификацию «IDENTITY» в существующий столбец - просто не может быть сделано. –

0

Вы можете использовать DBCC CHECKIDENT

DBCC CHECKIDENT 
( 
    table_name 
    [, { NORESEED | { RESEED [, new_reseed_value ] } } ] 
) 
    [ WITH NO_INFOMSGS ] 

Например DBCC CHECKIDENT ('empty', RESEED, 10);

Пожалуйста, обратитесь это DBCC CHECKIDENT

+0

Это не изменяет прирост, который сбрасывает семя –

1

Вы не можете изменить это на одном дыхании, вы должны создать новую таблицу и скопировать строки.

Попробуйте создать временную таблицу, подвинуться строки, удалить старую таблицу и переименовать временную таблицу:

BEGIN TRANSACTION 

CREATE TABLE dbo.Tmp_empty 
    (
    data_id int NOT NULL IDENTITY (70, 10), 
    emp_name varchar(20) NULL, 
    address varchar(20) NULL, 
    city varchar(20) NULL 
    ) ON [PRIMARY] 
GO 
SET IDENTITY_INSERT dbo.Tmp_empty ON 
GO 
IF EXISTS(SELECT * FROM dbo.empty) 
    EXEC('INSERT INTO dbo.Tmp_empty (data_id, emp_name, address, city) 
     SELECT data_id, emp_name, address, city FROM dbo.empty WITH (HOLDLOCK TABLOCKX)') 
GO 
SET IDENTITY_INSERT dbo.Tmp_empty OFF 
GO 
DROP TABLE dbo.empty 
GO 
EXECUTE sp_rename N'dbo.Tmp_empty', N'empty', 'OBJECT' 
GO 
COMMIT 
Смежные вопросы