如何在SQL中获取插入行的ID?
用户表:
Column | Type
--------|--------------------------------
ID | * Auto-incrementing primary key
Name |
Age |
查询示例:
insert into users (Name, Age) values ('charuka',12)
如何在SQL中获取插入行的ID?
Column | Type
--------|--------------------------------
ID | * Auto-incrementing primary key
Name |
Age |
insert into users (Name, Age) values ('charuka',12)
SELECT LAST_INSERT_ID();
在SQL Server中:
SELECT SCOPE_IDENTITY();
在 Oracle 中:
SELECT SEQNAME.CURRVAL FROM DUAL;
在 PostgreSQL 中:
SELECT lastval();
(编辑:lastval可以是任何值,currval需要一个命名序列)
注意:lastval() 返回您的会话分配的最新序列值,独立于其他会话中发生的情况。在 SQL Server 中,除了已有的其他解决方案外,您还可以执行以下操作:
INSERT INTO dbo.Users(Name, Age)
OUTPUT INSERTED.ID AS 'New User ID'
VALUES('charuka', 12)
OUTPUT
子句在执行插入、更新和删除时非常有用,您可以返回任何列,而不仅仅是自增的ID
列。
在SQL Server Books Online中了解更多关于OUTPUT
子句的信息。
INSERT INTO some_table (name, age) VALUES ('charuka', 12) RETURNING ID通过JDBC进行此操作时,您还可以以跨DBMS的方式执行此操作(无需使用RETURNING),只需在运行INSERT后调用getGeneratedKeys()即可。
我有同样的需求,并找到了这个答案...
这将在公司表(comp)中创建一条记录,然后获取在公司表上创建的自动ID并将其放入员工表(staff)中,以便将这两个表链接起来,即多个员工对应一个公司。它适用于我的SQL 2008数据库,也应该适用于SQL 2005及以上版本。
===========================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
-- '@recID' 用于保存我们即将获取的公司自动生成的 ID 号码
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
-- 上面这行代码用于创建一个临时表,以保存自动生成的ID号以备后用。它只有一个字段'tempID',其类型INT与'@recID'相同。
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
——上面的“OUTPUT inserted.”行用于从正在创建的记录中获取任何字段的数据。我们想要的数据是ID自动编号。因此,请确保它为您的表格指定了正确的字段名称,我的是'comp_id'。然后将其放入我们之前创建的临时表中。
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
-- 上面的代码用于搜索我们之前创建的临时表,其中保存了我们需要的ID。由于这个临时表中只有一条记录和一个字段,它将仅选择您需要的ID号并将其放入 '@recID' 中。'@recID' 现在具有您想要的ID号,您可以像我下面使用它一样随心所欲地使用。
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
-- 所以就是这样。我寻找这样的东西已经很久了,有了这个详细的分解,希望能对你有所帮助。