如何同时向两张表中插入数据,且表有关联!求指教

米修Baby 2013-10-09 06:42:41
请问,我现在要做一个功能,就是同时要向A表中和B表中插入数据,A表和B表靠着A表的主键来关联,A表插入的数据只有一条,但是同时向B表中插入的数据会有多条,请问有什么比较好的办法来解决这个问题吗? 求一个实例或者较详细的代码,来学习,先谢谢各位了!
...全文
41328 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alyces 2015-01-14
  • 打赏
  • 举报
回复
引用 楼主 lvxiaowei0516 的回复:
请问,我现在要做一个功能,就是同时要向A表中和B表中插入数据,A表和B表靠着A表的主键来关联,A表插入的数据只有一条,但是同时向B表中插入的数据会有多条,请问有什么比较好的办法来解决这个问题吗? 求一个实例或者较详细的代码,来学习,先谢谢各位了!
楼主问题解决吗?求只解决办法和demo
Alyces 2015-01-14
  • 打赏
  • 举报
回复
引用 39 楼 cainiaoecho1234 的回复:
问题解决了吗?
你也有类似的问题吗?解决了吗,求指点
Alyces 2015-01-14
  • 打赏
  • 举报
回复
我也遇到了同样的问题:http://bbs.csdn.net/topics/390970512 ,望各位高手指点迷津,谢谢!
cainiaoecho1234 2015-01-04
  • 打赏
  • 举报
回复
问题解决了吗?
gclol 2013-10-14
  • 打赏
  • 举报
回复
建存储过程,先插入主表,用@@IDENTITY变量获取新记录id,再将这个id插入子表
tcmakebest 2013-10-14
  • 打赏
  • 举报
回复
楼主说要同时插入,这是不可能的,只要结果是正确就行了。
vip路过 2013-10-13
  • 打赏
  • 举报
回复
存储过程或者写多条sql插入,后者比较简单。
generhappy 2013-10-13
  • 打赏
  • 举报
回复
引用 31 楼 lvxiaowei0516 的回复:
[quote=引用 25 楼 generhappy 的回复:] 哦 我明白你想说什么 先往主表插入数据,然后取出插入这条数据的主键,在执行第二条语句 insert into mytable values('李四')select @@identity as Id_Code 插入A表时这样写,直接返回主键!
返回唯一的值,该怎样接收呢? [/quote] 执行这条sql句子,这条插入的句子,你就当作是select来处理就行了,他返回一个表,字段名是Id_Code 用dataset就可以,然后取出dataset里的唯一字段的值就行了,肯定只有一条数据的
天殇月痕 2013-10-12
  • 打赏
  • 举报
回复
事务?或者触发器?不都能实现吗??直接写个存储过程
吉普赛的歌 2013-10-11
  • 打赏
  • 举报
回复
结果:
mainId      mainName
----------- --------------------
1           main1

subId       mainId      subName
----------- ----------- --------------------
1           1           sub1
2           1           sub2
3           1           sub3
吉普赛的歌 2013-10-11
  • 打赏
  • 举报
回复
引用 31 楼 lvxiaowei0516 的回复:
返回唯一的值,该怎样接收呢?
全套, 慢慢看吧
--1 创建主表 
IF OBJECT_ID('Main') IS NOT NULL
BEGIN
	DROP TABLE Main
END
GO
CREATE TABLE Main(
	mainId INT PRIMARY KEY IDENTITY(1,1),
	mainName NVARCHAR(20)
)
GO
--2 创建子表 
IF OBJECT_ID('Sub') IS NOT NULL
BEGIN
	DROP TABLE Sub
END
GO
CREATE TABLE Sub(
	subId INT PRIMARY KEY IDENTITY(1,1),
	mainId INT NOT NULL,
	subName NVARCHAR(20)
)
GO
--3 创建插入数据的存储过程
IF OBJECT_ID('proc_InsertMainAndSub') IS NOT NULL
BEGIN
	DROP PROCEDURE proc_InsertMainAndSub
END
GO
CREATE PROC proc_InsertMainAndSub
AS
BEGIN
	BEGIN TRAN tran1
	BEGIN TRY
		DECLARE @mainId INT
		INSERT INTO Main VALUES ('main1')
		SELECT @mainId = @@identity
		INSERT INTO Sub VALUES (@mainId, 'sub1')
		INSERT INTO Sub VALUES (@mainId, 'sub2')
		INSERT INTO Sub VALUES (@mainId, 'sub3')
		COMMIT TRAN tran1
	END TRY
	BEGIN CATCH
		ROLLBACK TRAN tran1
	END CATCH
END
GO

--执行存储过程
EXEC proc_InsertMainAndSub

--查看数据
SELECT * FROM Main m
SELECT * FROM Sub s

--删除测试
DROP TABLE Main
DROP TABLE Sub
DROP PROCEDURE proc_InsertMainAndSub
米修Baby 2013-10-10
  • 打赏
  • 举报
回复
引用 20 楼 guwei4037 的回复:
你参考一下这个例子。http://database.51cto.com/art/201009/224651.htm 另外,关于数据库SQL的知识,可以参考:http://msdn.microsoft.com/zh-cn/library/ms174377.aspx
可以加下好友吗?qq?
全栈极简 2013-10-10
  • 打赏
  • 举报
回复
你参考一下这个例子。http://database.51cto.com/art/201009/224651.htm 另外,关于数据库SQL的知识,可以参考:http://msdn.microsoft.com/zh-cn/library/ms174377.aspx
米修Baby 2013-10-10
  • 打赏
  • 举报
回复
引用 15 楼 hou306010849 的回复:
[quote=引用 3 楼 guwei4037 的回复:] 先插主表,再插子表。加个事务,多条sql语句不就可以了么?
这个就可以,你不比纠结于同时插入,这个也可以相当于同时插入,因为有事务,你不用担心数据不同步问题!!![/quote]请问有详细的代码或者实例供参考吗?
米修Baby 2013-10-10
  • 打赏
  • 举报
回复
引用 12 楼 zy0412326 的回复:
[quote=引用 3 楼 guwei4037 的回复:] 先插主表,再插子表。加个事务,多条sql语句不就可以了么?
这个方法就可以啊[/quote]请问有实例或者代码分享下供参考吗?
米修Baby 2013-10-10
  • 打赏
  • 举报
回复
引用 3 楼 guwei4037 的回复:
先插主表,再插子表。加个事务,多条sql语句不就可以了么?
请问有详细的方法吗?谢谢了,比如说实例或者代码
reenjie 2013-10-10
  • 打赏
  • 举报
回复
引用 10 楼 lvxiaowei0516 的回复:
[quote=引用 5 楼 fjc1988 的回复:] 首先在A表插入一条数据,并且返回新增数据ID。 获取ID后,再向B表插入数据。插入多条数据,可以使用批量插入,也可以循环插入数据。 最后,用事物把你的插入A表和B表的过程给框起来。
请问,如何在A表插入数据后直接返回ID?[/quote] insert A(字段)values(對應字段值) select @@IDENTITY 同時插入多條數據,你可以借鑒 http://blog.csdn.net/tjvictor/article/details/4360030
Im_Sorry 2013-10-10
  • 打赏
  • 举报
回复
引用 3 楼 guwei4037 的回复:
先插主表,再插子表。加个事务,多条sql语句不就可以了么?
这个就可以,你不比纠结于同时插入,这个也可以相当于同时插入,因为有事务,你不用担心数据不同步问题!!!
qq3895 2013-10-10
  • 打赏
  • 举报
回复
执行多条sql sql+=""; 或用Append 存储多条sql语句
dota_sky_god 2013-10-10
  • 打赏
  • 举报
回复
如果是GUID类型的ID,就不要用DBS系统自动生成的GUID,自己用GUID.NEWGUID()保存下 如果是数字自增类型,获取A表最大的ID即可
加载更多回复(21)

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧