日期:2014-05-16 浏览次数:20446 次
在开发的时候,大家可能也遇见过下面类似的问题。
场景说明:
存在表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。