Visual Studio SQL Server LocalDB调用序列nextval插入数据报错求助
解决LocalDB中序列插入报错的问题
你碰到的问题本质是Oracle(SQL Developer对应的数据库)和SQL Server(LocalDB属于SQL Server家族)的序列调用语法不一样导致的。
在Oracle里,我们习惯用序列名.nextval来获取序列的下一个值,但SQL Server完全不支持这种写法——它会把id_department_seq.nextval当成一个多部分标识符(比如表.列这种格式),但实际上不存在这样的对象,所以就抛出了Msg 4104的绑定错误。
正确的SQL Server写法
把所有序列名.nextval替换成NEXT VALUE FOR 序列名就可以了,你的插入语句修改后应该是这样:
INSERT INTO department (id_department, name, abbreviation, dept_head) VALUES ( NEXT VALUE FOR id_department_seq, 'School of Communications, Media, Arts and Design', NEXT VALUE FOR department_abbreviation_seq, 'Nate Horowitz' );
额外提醒
如果你的序列还没在LocalDB里创建,要确保用SQL Server的语法创建序列,比如:
-- 创建id序列 CREATE SEQUENCE id_department_seq START WITH 1 INCREMENT BY 1; -- 创建缩写序列 CREATE SEQUENCE department_abbreviation_seq START WITH 1 INCREMENT BY 1;
这样执行插入语句就不会报错啦。
内容的提问来源于stack exchange,提问作者Shivam




