Последовательность SQL Server 2012

Я создаю таблицу и последовательность, чтобы заменить идентификатор в таблице. Я использую SQL Server 2012 Express, но получаю эту ошибку, когда пытаюсь вставить данные в таблицу.

Сообщение 11719, уровень 15, состояние 1, строка 2
Функция NEXT VALUE FOR не разрешена в проверочных ограничениях, объектах по умолчанию, вычисляемых столбцах, представлениях, определяемых пользователем функциях, определяемых пользователем агрегатах, определяемых пользователем таблицах. типы, подзапросы, общие табличные выражения или производные таблицы.

Код T-SQL:

insert into Job_Update_Log(log_id, update_reason, jobid) 
values((select next value for Job_Log_Update_SEQ),'grammer fixing',39);

Это моя таблица:

create table Job_Update_Log
(
   log_id int primary key  ,
   update_reason nvarchar(100) ,
   update_date date default getdate(),
   jobid bigint not null,
   foreign key(jobid) references jobslist(jobid)
);

и это моя последовательность:

CREATE SEQUENCE [dbo].[Job_Log_Update_SEQ] 
 AS [int]
 START WITH 1
 INCREMENT BY 1
 NO CACHE 
GO

person danarj    schedule 05.10.2012    source источник


Ответы (3)


Просто избавьтесь от подвыборки в разделе VALUES, например:

insert into Job_Update_Log(log_id,update_reason,jobid) 
        values (next value for Job_Log_Update_SEQ,'grammer fixing',39);

Ссылка: http://msdn.microsoft.com/en-us/library/hh272694%28v=vs.103%29.aspx

person TToni    schedule 05.10.2012

Ваш синтаксис вставки кажется неправильным. Вы пытаетесь использовать оператор SELECT внутри раздела VALUES вашего запроса. Если вы хотите использовать SELECT, вы будете использовать:

insert into Job_Update_Log(log_id,update_reason,jobid) 
select next value for Job_Log_Update_SEQ,'grammer fixing',39;

См. SQL Fiddle с демонстрацией.

Я изменил синтаксис с INSERT INTO VALUES на INSERT INTO ... SELECT. Я использовал это, потому что вы выбираете следующее значение последовательности.

Однако, если вы хотите использовать INSERT INTO.. VALUES, вам придется удалить SELECT из запроса:

insert into Job_Update_Log(log_id,update_reason,jobid) 
values(next value for Job_Log_Update_SEQ,'grammer fixing',39);

См. SQL Fiddle с демонстрацией.

Оба они будут INSERT записи в таблице.

person Taryn    schedule 05.10.2012

Попробуй это:


– со столом

создать последовательность idsequence начать с 1 приращения на 3

create table Products_ext
(
id int,
Name varchar(50)
);

INSERT dbo.Products_ext (Id, Name)
VALUES (NEXT VALUE FOR dbo.idsequence, ‘ProductItem’);

select * from Products_ext;


/* If you run the above statement two types, you will get the following:-

1    ProductItem
4    ProductItem

*/

drop table Products_ext;
drop sequence idsequence;

------------------------------
person baghul    schedule 16.11.2012