我有一个表,通过从另一个表中选择来插入数据。例如,
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的现有表结构。
但它不起作用。有什么想法吗?
答案 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