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
您的插入语法似乎是错误的.您正在尝试在查询部分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)
我将语法从更改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);
Run Code Online (Sandbox Code Playgroud)
这两个都将INSERT记录到表中.