使用SQL Server中的标识列为INSERT语句指定“ NEXT VALUE”

约翰·福勒

考虑下表和Microsoft的INSERT文档中涉及IDENTITY列的SQL

CREATE TABLE dbo.T1 (column_1 int IDENTITY, column_2 VARCHAR(30));
GO

INSERT T1 (column_2) VALUES ('Row #2');

INSERT语句未指定column_1为表的列,并且SQL Server自动为该标识列填充下一个值。这是标识列的正常处理方式。

在指定列名的同时,如何具有相同的行为?

例如,我正在寻找类似的东西

INSERT INTO T1 (column_1, column_2) 
VALUES (NEXT VALUE, 'Row #3');
GO

我不相信NEXT VALUE这里有用,但是有什么有用的吗?是否有密钥令牌或功能将指示应使用标识列?

注意:我问的原因是我正在使用的框架要求在列列表中指定所有列。

代码不同

如果您使用的是SQL Server 2012及更高版本,则可以使用序列。但是您必须首先删除该IDENTITY属性Column1这只能通过复制并重命名新表来完成。

CREATE SEQUENCE Column1_Sequence
    AS int
    START WITH 0;

CREATE TABLE T1
(
    Column1     int DEFAULT (NEXT VALUE FOR Column1_Sequence) PRIMARY KEY
,   Column2     nvarchar(30)
)

之后,您可以通过两种方式将数据插入表中:

INSERT INTO T1 (Column1, Column2)
    SELECT      NEXT VALUE FOR Column1_Sequence
            ,   'Row #2'

INSERT INTO T1 (Column2)
    SELECT      'Hello world'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档