插入表格时如何填充标识列?

时间:2014-04-18 18:53:27

标签: 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_IDENTITY()+1, FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact

我不想将ID作为标识列,因为我复制了一个现有列ID的现有表结构。

但它不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这取决于您使用的确切SQL服务器,但由于您似乎正在使用Microsoft SQL Server:

仅将您的列标记为ID是不够的。您需要确保ID列在SQL Server中标记为标识列。这类似于在PostgreSQL中标记列SERIAL或在MySQL中标记AUTOINCREMENT。确保您已经完成了这项工作。

假设您已经完成了这一操作,只需让数据库本身通过显式不引用INSERT语句中的该列来添加标识值。因此,像

INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact

并依靠SQL Server的底层身份支持来填写它将为您提供良好的工作。从您的示例中可以看出,您首先缺少的是将ID列标记为标识列。

答案 1 :(得分:1)

他们是正确的,你应该指定一个自动编号列。如下:

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

答案 2 :(得分:1)

低于你想要的东西?

选择        id + 0       ,名字       ,姓    INTO test_table    来自Person.Contact