繁体   English   中英

SQL Server 2012序列

[英]SQL Server 2012 sequence

我创建一个表和序列以替换表中的标识,我使用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

只需摆脱VALUES部分中的subselect,就像这样:

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

您的插入语法似乎错误。 您正在尝试在查询的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

我将语法从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记录到表中。

试试这个:


–带桌子

创建序列ID序列以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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM