2012-10-05 58 views
8

我为了在我使用SQL Server 2012 Express中的表来代替身份创建表和序列,但我得到这个错误,而我试图将数据插入到表SQL Server 2012的序列

消息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 

回答

6

你插入语句似乎是错误。您正试图在查询的VALUES部分中使用SELECT声明。如果你想使用SELECT则可以使用:

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

SQL Fiddle with Demo

我改变了语法从INSERT INTO VALUESINSERT 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 with Demo

这两项将INSERT记录到表中。

0

试试这个:


- 随着表

创建序列idsequence 开始机智h 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; 

------------------------------