SQL Server 2012序列

dan*_*arj 9 sql t-sql sql-server sequences sql-server-2012-express

我创建一个表和序列,以便替换我使用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);
Run Code Online (Sandbox Code Playgroud)

这是我的表:

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)
);
Run Code Online (Sandbox Code Playgroud)

这是我的顺序:

CREATE SEQUENCE [dbo].[Job_Log_Update_SEQ] 
 AS [int]
 START WITH 1
 INCREMENT BY 1
 NO CACHE 
GO
Run Code Online (Sandbox Code Playgroud)

TTo*_*oni 14

只需删除VALUES部分中的子选择,如下所示:

insert into Job_Update_Log(log_id,update_reason,jobid) 
        values (next value for Job_Log_Update_SEQ,'grammer fixing',39);
Run Code Online (Sandbox Code Playgroud)

参考:http://msdn.microsoft.com/en-us/library/hh272694%28v=vs.103%29.aspx


Tar*_*ryn 7

您的插入语法似乎是错误的.您正在尝试在查询部分SELECT内使用语句VALUES.如果你想使用SELECT那么你将使用:

insert into Job_Update_Log(log_id,update_reason,jobid) 
select next value for Job_Log_Update_SEQ,'grammer fixing',39;
Run Code Online (Sandbox Code Playgroud)

请参阅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);
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

这两个都将INSERT记录到表中.