您的位置:首页 > 数据库

向数据库插入数据后返回新插入行的主键

2013-10-09 23:17 465 查看
在开发的时候,大家可能也遇见过下面类似的问题。

场景说明:

存在表1,表2两张表,两表满足以下条件:

表1 的主键为表2的外键

表1的主键为自动编号,所以在插入数据时,会自增,无需人为干预

现在,想进行如下操作:

向表1插入1条新纪录,同时需要向表2插入多条新记录,表2中插入记录的外键为表1新插入记录的主键

问题解析:

因为表1的主键为自动编号,所以向表1插入新纪录的过程中,我们程序员是不知道表1新插入这条记录的主键的,因为这个往往不需要我们关注。但是向表2插入新记录时,这个主键又是必须要获取到的,那我们该怎么办呢

可以采用下面的方法:

NSERT INTO tableName (fieldname ...) values (value ...) SELECT @@IDENTITY AS returnName;

 

具体实例:

创建表tb_Class及表tb_Student。tb_Class的主键为classid,自动编号。tb_Student的外键classid与tb_Class表的主键classid对应。

CREATE TABLE [dbo].[tb_Class](
[classid] [int] IDENTITY(1,1) NOT NULL,
[classname] [nchar](10) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[tb_Student](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nchar](10) NOT NULL,
[age] [int] NOT NULL,
[classid] [int] NULL,
CONSTRAINT [PK_tb_Student] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

 

插入数据操作:

DECLARE @classId AS INT;
INSERT INTO tb_Class(classname) VALUES ('1班') SELECT @classId=@@IDENTITY;
INSERT INTO tb_Student(name,age,classid) VALUES ('tiana0',20,@classId);
INSERT INTO tb_Student(name,age,classid) VALUES ('tiana1',18,@classId);
INSERT INTO tb_Student(name,age,classid) VALUES ('tiana2',21,@classId);
SELECT * FROM tb_Class;
SELECT * FROM tb_Student;

 

插入两次后的结果为:



 

好了,88。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息