Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятное поведение автоинкрементного поля.  [new]
JuriNN45
Member

Откуда:
Сообщений: 1
Сервер MSSQL 2008.

Есть таблица:
create table dbo.companyes (
	id int identity(1, 1) not null,
	parent_id int null,
	name varchar(100) collate cyrillic_general_ci_as not null,
	cn_name varchar(32) collate cyrillic_general_ci_as null,
	country char(2) collate cyrillic_general_ci_as null,
	state_or_province varchar(64) collate cyrillic_general_ci_as null,
	locality varchar(64) collate cyrillic_general_ci_as null,
	constraint pk_companyes primary key clustered (id),
	constraint uq1_companyes unique (name, parent_id),
	constraint uq2_companyes unique (cn_name, parent_id),
	constraint ck1_companyes check (name is null or name is not null and ltrim(rtrim(name))<>''), 
	constraint ck2_companyes check (cn_name is null or cn_name is not null and ltrim(rtrim(cn_name))<>''), 
	constraint ck3_companyes check (country is null or country is not null and ltrim(rtrim(country))<>''),  
	constraint ck4_companyes check (state_or_province is null or state_or_province is not null and ltrim(rtrim(state_or_province))<>''),  
	constraint ck5_companyes check (locality is null or locality is not null and ltrim(rtrim(locality))<>''),
	constraint ck6_companyes check (country is null and state_or_province is null and locality is null or country is not null and state_or_province is not null and locality is not null),
	constraint fk1_companyes foreign key (parent_id) references dbo.companyes (id) on update no action on delete no action
) on primary


И есть процедура вставки в эту таблицу:
create procedure [dbo].[p_addcompany]
	@parent_id int,
	@name varchar(100),
	@cn_name varchar(32),
	@country char(2),
	@locality varchar(64),
	@state_or_province varchar(64)		
with execute as 'dbo'    
as
begin
    declare @insVal table (id int, parent_id int, name varchar(100), cn_name varchar(32), country char(2), locality varchar(64), state_or_province varchar(64));

	insert into dbo.companyes (parent_id, name, cn_name, country, locality, state_or_province) 
	output INSERTED.* into @insVal
	values (@parent_id, @name, @cn_name, @country, @locality, @state_or_province);        

	select * from @insVal;
end


Последней выборкой
select * from @insVal;
в процедуре я возвращаю вставленную запись. А проблема в следующем... Из-за это самой выборки у меня последовательность автоинкрементного поля ID таблицы нарушается - 1, 3, 5, 7 и т. д. Если же закомментирую эту выборку последовательность поля ID не нарушается - 1,2,3,4,5 и т. д. Почему так происходит?
23 окт 14, 10:06    [16746808]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение автоинкрементного поля.  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Поле со свойством IDENTITY получает значение в момент вставки.
Никакой SELECT не может на него влиять.
23 окт 14, 10:16    [16746841]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение автоинкрементного поля.  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
JuriNN45,

последовательность значений в поле со свойством IDENTITY не должно Вас вообще волновать!
23 окт 14, 10:17    [16746847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить