问题描述
我想将序列的当前值(表1中的主键)插入到表2的列中。 我正在使用:MS SQL SERVER 2016
我尝试过的查询:
INSERT INTO [dbo].[Employee] ([EMP_ID],[DEPT_ID],[DESCRIPTION])
VALUES (NEXT VALUE FOR EMP_ID_SEQ,SELECT current_value FROM sys.sequences WHERE [name]= 'DEPT_ID_SEQ',NULL)
错误:
关键字“ SELECT”附近的语法不正确。
如果我单独运行SELECT current_value FROM sys.sequences WHERE [name]= 'DEPT_ID_SEQ'
,效果很好。
DEPT_ID的值是FK到DEPT表,也是一个序列。 让我知道其他替代方法。最好在一个语句中,因为我必须将其模制在liquibase标签中,并通过liquibase更新运行整个查询。
解决方法
使用INSERT INTO ... SELECT
:
INSERT INTO [dbo].[Employee] ([EMP_ID],[DEPT_ID],[DESCRIPTION])
CONVERT(int,SELECT NEXT VALUE FOR EMP_ID_SEQ),current_value,NULL
FROM sys.sequences WHERE [name] = 'DEPT_ID_SEQ';
,
感谢@Tim学会了一些新东西:) 但可悲的是,由于liquibase的复杂性,我不得不寻找其他选择: 下面的查询效果很好,也易于整合到liquibase中。
INSERT INTO [dbo].[Employee] ([EMP_ID],[DESCRIPTION])
VALUES (NEXT VALUE FOR EMP_ID_SEQ,(select CAST(SELECT current_value FROM sys.sequences WHERE [name]= 'DEPT_ID_SEQ') As INT)),NULL)