div*_*iya 7 sql-server sql-server-2005
insert into Student
values('1', 'joedio', 'newyark', GETDATE())
Run Code Online (Sandbox Code Playgroud)
尝试运行此SQL时收到以下错误消息:
仅当使用列列表并且IDENTITY_INSERT为ON时,才能为表'Student'中的identity列指定一个显式值。
San*_*per 15
如果您想通过查询插入主键,即使它是自动增量,那么您必须设置IDENTITY_INSERT ON如下,它将允许您通过查询插入唯一值:
SET IDENTITY_INSERT [Tablename] ON;
Run Code Online (Sandbox Code Playgroud)
您的查询现在将是:
SET IDENTITY_INSERT Student ON;
INSERT INTO Student VALUES('1','joedio','newyark',GETDATE());
SET IDENTITY_INSERT Student OFF;
Run Code Online (Sandbox Code Playgroud)
如果您希望 SQL 自行管理,则默认设置为IDENTITY_INSERT OFF并设置自动增量,这意味着在每次插入时,新值都会分配给该 PK 列。
最好使用默认设置执行,SET IDENTITY_INSERT Student OFF因为通过手动插入插入重复值的可能性,它会引发错误。
如果您的表有Identity Column,那么您必须在插入时提及所有其他列。
仅用于示例:
INSERT INTO Student (ID, Name, State, Date) VALUES('1','joedio','newyark',GETDATE())
Run Code Online (Sandbox Code Playgroud)
如果第一列是标识,则在插入时跳过该值:
INSERT INTO Student (Name, State, Date) VALUES('joedio','newyark',GETDATE())
Run Code Online (Sandbox Code Playgroud)
如果您想将值插入到标识列中 SQL Server
SET IDENTITY_INSERT IdentityTable ON
INSERT INTO Student (ID, Name, State, Date) VALUES('1','joedio','newyark',GETDATE())
SET IDENTITY_INSERT IdentityTable OFF
Run Code Online (Sandbox Code Playgroud)
并参考链接如何将值插入 SQL Server 中的标识列以获取更多信息。
尝试一下:如果您确实想将值插入到IDENTITY列中,那么您必须首先为表启用此功能
SET IDENTITY_INSERT [Tablename] ON;
INSERT INTO [Tablename]..........
SET IDENTITY_INSERT [Tablename] OFF;
Run Code Online (Sandbox Code Playgroud)
否则,只需从中排除第一个值即可消除错误values
INSERT INTO Student --No need to add column definition if you are inserting rest of all
VALUES('joedio', 'newyark', GETDATE()) --Error Free
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24935 次 |
| 最近记录: |