Joh*_*ler 1 sql sql-server sql-insert
考虑下表和Microsoft 的 INSERT 文档中处理 IDENTITY 列的SQL :
CREATE TABLE dbo.T1 (column_1 int IDENTITY, column_2 VARCHAR(30));
GO
INSERT T1 (column_2) VALUES ('Row #2');
Run Code Online (Sandbox Code Playgroud)
该INSERT语句未指定column_1为表的列,并且 SQL Server 自动填充该标识列的下一个值。这是处理标识列的正常方式。
如何在指定列名的同时具有相同的行为?
例如,我正在寻找类似的东西:
INSERT INTO T1 (column_1, column_2)
VALUES (NEXT VALUE, 'Row #3');
GO
Run Code Online (Sandbox Code Playgroud)
我不相信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)
)
Run Code Online (Sandbox Code Playgroud)
之后,您可以通过两种方式向表中插入数据:
INSERT INTO T1 (Column1, Column2)
SELECT NEXT VALUE FOR Column1_Sequence
, 'Row #2'
INSERT INTO T1 (Column2)
SELECT 'Hello world'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16487 次 |
| 最近记录: |