SQL Server 2012序列

13

我创建了一个表和序列来替换表中的自增字段,我使用 SQL Server 2012 Express,但是在尝试向表中插入数据时出现了以下错误:

Msg 11719, Level 15, State 1, Line 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
3个回答

24

8

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

这两个操作都会将记录插入表中。


0

试试这个:


- 带表格

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接