Sql 插入表时如何填充标识列?
我有一个表,它的数据是通过从另一个表中选择来插入的。比如说,Sql 插入表时如何填充标识列?,sql,sql-server,Sql,Sql Server,我有一个表,它的数据是通过从另一个表中选择来插入的。比如说, CREATE TABLE TestTable (ID int, FirstName VARCHAR(100), LastName VARCHAR(100)) INSERT INTO TestTable (FirstName, LastName) SELECT FirstName, LastName FROM Person.Contact 但是如何填充ID呢?我试过了 INSERT INTO TestTable (SCOPE_IDE
CREATE TABLE TestTable (ID int, FirstName VARCHAR(100), LastName VARCHAR(100))
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
但是如何填充ID呢?我试过了
INSERT INTO TestTable (SCOPE_IDENTITY()+1, FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
我不想将ID设为标识列,因为我复制了现有的表结构,该表结构的ID为常规列
但它不起作用。有什么想法吗?他们说得对,你应该指定一个自动编号列。详情如下:
CREATE TABLE TestTable
(
ID int NOT NULL IDENTITY (1, 1),
Firstname varchar(100) NULL,
Lastname varchar(100) NULL
)
然后,在插入时,请使用以下命令:
DECLARE @MyTableVar table( ID int);
INSERT INTO TestTable
OUTPUT INSERTED.ID
INTO @MyTableVar
SELECT FirstName, LastName
FROM Person.Contact;
然后为插入的标识选择@MyTableVar,因为它们是正确的,您应该指定一个自动编号列。详情如下:
CREATE TABLE TestTable
(
ID int NOT NULL IDENTITY (1, 1),
Firstname varchar(100) NULL,
Lastname varchar(100) NULL
)
然后,在插入时,请使用以下命令:
DECLARE @MyTableVar table( ID int);
INSERT INTO TestTable
OUTPUT INSERTED.ID
INTO @MyTableVar
SELECT FirstName, LastName
FROM Person.Contact;
然后为插入的标识选择@MyTableVar,这取决于您使用的确切SQL server,但由于它看起来您使用的是Microsoft SQL server: 仅仅将列标记为
ID
是不够的。您需要确保在SQL Server中将ID
列标记为标识列。这类似于在PostgreSQL中标记列SERIAL
,或在MySQL中标记列AUTOINCREMENT
。确保你先做了这件事
假设您已经这样做了,只需让数据库本身通过在INSERT
语句中显式地不引用该列来添加标识值即可。因此
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
而依靠SQL Server的底层身份支持来为您填充它将很好地工作。从您的示例来看,您缺少的是首先将
ID
列标记为标识列。这取决于您使用的确切SQL server,但由于它看起来您使用的是Microsoft SQL server:
仅仅将列标记为ID
是不够的。您需要确保在SQL Server中将ID
列标记为标识列。这类似于在PostgreSQL中标记列SERIAL
,或在MySQL中标记列AUTOINCREMENT
。确保你先做了这件事
假设您已经这样做了,只需让数据库本身通过在INSERT
语句中显式地不引用该列来添加标识值即可。因此
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
而依靠SQL Server的底层身份支持来为您填充它将很好地工作。从您的示例来看,您缺少的是首先将
ID
列标记为标识列。是否在您要查找的内容下方
挑选
id+0
,姓
,姓
进入测试表
来自个人。联系人是否低于您要查找的内容 挑选 id+0 ,姓 ,姓 进入测试表
从Person.Contact主键是否设置为自动递增?因为这样您就不需要在insert语句中添加主键字段了/您不能将ID定义为autoinc吗?您正在使用什么RDBMS?主键是否设置为自动递增?因为这样您就不需要在insert语句中添加主键字段了/您不能将ID定义为autoinc吗?您正在使用什么RDBMS?我尝试用@@IDENTITY替换SCOPE_IDENTITY()+1,但在将varchar转换为数据类型numeric时出现算术溢出错误。我尝试用@@IDENTITY替换SCOPE_IDENTITY()+1,但在将varchar转换为数据类型numeric时出现算术溢出错误。