如何向全为自动生成值的SQL Server表插入数据?多次尝试无效
向全自动生成值的SQL Server表插入数据的解决方案
嘿,我来给你理清楚这个问题——当表的所有列都是自动生成值的时候(比如自增ID、默认时间、计算列这类),其实SQL Server有专门的语法来处理,不用费劲去凑值。下面分两种常见情况来说:
一、所有列都是自动生成的(无手动指定需求)
这种情况最简单,直接用DEFAULT VALUES或者空列列表的INSERT语句就能插入一行,数据库会自动给每一列填充预设的自动值。
举个例子,假设你的表是这样创建的(典型的全自动生成表):
CREATE TABLE AutoGeneratedTable ( ID INT IDENTITY(1,1) PRIMARY KEY, -- 自增ID CreatedTime DATETIME DEFAULT GETDATE(), -- 默认当前时间 CalculatedCol AS CONVERT(VARCHAR(20), ID * 2) PERSISTED -- 基于ID的计算列 );
你只需要执行其中一句就能插入数据:
-- 方法1:用DEFAULT VALUES INSERT INTO AutoGeneratedTable DEFAULT VALUES; -- 方法2:空列列表+空值列表 INSERT INTO AutoGeneratedTable () VALUES ();
执行后,数据库会自动生成ID(比如从1开始递增)、CreatedTime设为当前时间、CalculatedCol自动计算出对应的值。
二、需要手动指定某列的值(比如自增ID)
如果你的表有自增列(IDENTITY),默认是不允许手动插入值的,但如果你需要指定特定的ID值,可以先开启IDENTITY_INSERT开关,插入后记得关闭,避免影响后续的自动插入。
比如要给上面的表插入ID为100的行:
-- 开启IDENTITY_INSERT SET IDENTITY_INSERT AutoGeneratedTable ON; -- 手动指定ID列插入 INSERT INTO AutoGeneratedTable (ID) VALUES (100); -- 关闭IDENTITY_INSERT,恢复自动递增 SET IDENTITY_INSERT AutoGeneratedTable OFF;
注意:计算列是不能手动插入值的,因为它的值是由其他列计算而来,数据库会自动处理,强行插入会报错。
小提醒
如果你的插入尝试一直失败,大概率是没用到正确的语法——比如硬要给自动列塞值,或者没处理自增列的开关。试试上面的方法,应该就能解决啦。
内容的提问来源于stack exchange,提问作者e_i_pi
相关产品推荐
相关产品推荐

