Question: I have a table whose data is inserted by selecting from another table. For example, 

```
CREATE TABLE TestTable (ID int, FirstName VARCHAR(100), LastName VARCHAR(100))

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

```

But How do I populate the ID? I tried

```
INSERT INTO TestTable (SCOPE_IDENTITY()+1, FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact

```

I don't want to make ID as identity column is because I duplicate the table structure from an exsiting one which the ID is regular column.

But it doesn't work. Any idea?

Answer: 
This depends on the exact SQL server you're using, but since it appears you're using Microsoft SQL Server:

Simply labeling your column as `ID` is not enough. You'll need to make sure that the `ID` column is marked in SQL Server as an Identity column. This is similar to marking a column `SERIAL` in PostgreSQL, or `AUTOINCREMENT` in MySQL. Make sure you've done this first.

Assuming you've done that, simply let the database itself add the identity value by explicitly not referencing that column in your `INSERT` statement. Thus, something like

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

```

and relying on SQL Server's underlying identity support to fill it in for you will work fine. It looks from your example like the thing you're missing is marking the `ID` column as an identity column in the first place.
Is below what you are looking for?

SELECT
 id + 0
 ,FirstName
 ,LastName
 INTO test\_table
 From Person.Contact