如果我有2个表,请将它们称为TableA和TableB。 TableB包含一个引用TableA的外键。我现在需要为给定场景添加数据到TableA和TableB。为此,我首先必须在TableA中插入数据,然后查找并检索TableA的最后插入的主键,并将其用作TableB中的外键值。然后我在TableB中插入值。这似乎只是为了插入一组数据而做的工作。我还能怎么做到这一点?如果可能的话,请为我提供SQL Server 2005的SQL语句。如何将数据添加到通过外键链接的两个表中?
5
A
回答
4
这听起来是正确的。请注意,您可以基于每行使用SCOPE_IDENTITY()
,或者如果使用INSERT/OUTPUT语法,然后加入第一个插入的输出集合,则可以执行基于集合的操作 - 例如,在这里我们只有1 INSERT(each)into“real”tables:
/*DROP TABLE STAGE_A
DROP TABLE STAGE_B
DROP TABLE B
DROP TABLE A*/
SET NOCOUNT ON
CREATE TABLE STAGE_A (
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE STAGE_B (
CustomerKey varchar(10),
OrderNumber varchar(100))
CREATE TABLE A (
Id int NOT NULL IDENTITY(51,1) PRIMARY KEY,
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE B (
Id int NOT NULL IDENTITY(1123,1) PRIMARY KEY,
CustomerId int,
OrderNumber varchar(100))
ALTER TABLE B ADD FOREIGN KEY (CustomerId) REFERENCES A(Id);
INSERT STAGE_A VALUES ('foo', 'Foo Corp')
INSERT STAGE_A VALUES ('bar', 'Bar Industries')
INSERT STAGE_B VALUES ('foo', '12345')
INSERT STAGE_B VALUES ('foo', '23456')
INSERT STAGE_B VALUES ('bar', '34567')
DECLARE @CustMap TABLE (CustomerKey varchar(10), Id int NOT NULL)
INSERT A (CustomerKey, Name)
OUTPUT INSERTED.CustomerKey,INSERTED.Id INTO @CustMap
SELECT CustomerKey, Name
FROM STAGE_A
INSERT B (CustomerId, OrderNumber)
SELECT map.Id, b.OrderNumber
FROM STAGE_B b
INNER JOIN @CustMap map ON map.CustomerKey = b.CustomerKey
SELECT * FROM A
SELECT * FROM B
1
如果你直接使用SQL,你有正确的解决方案。
如果你正在执行从代码插入,你可能有更高层次的结构,可以帮助你实现这一点(LINQ,Django模型等)。
1
如果你打算在直接SQL中这样做,我建议创建一个将所有数据作为参数的存储过程,然后在事务中执行插入/选择标识/插入步骤。尽管该过程仍然与手动插入相同,但使用存储过程将使您可以更轻松地从代码中使用它。正如@Rax提到的,您也可以使用ORM来获得类似的功能。
相关问题
- 1. 将数据插入到通过外键链接的表中
- 2. 如何通过接口将外键添加到ASPNET Membership Provider?
- 3. 将超链接添加到数据表
- 4. 将数据插入通过外键连接到另一个表的数据
- 5. 如何将数据添加到两个因表中的Django
- 6. 如何通过scala中的键加入两个数据集spark
- 7. 通过外键链接的三个表上的内部联接
- 8. 将外键添加到rails数据库
- 9. 如何将两个按钮添加到asp.net MVC中的两个动作链接?
- 10. laravel-mongodb:如何将外键添加到两个现有集合?
- 11. 如何通过sql中的外键关系将数据插入到两个表中关联php
- 12. Python和MySql,将数据插入到通过外键连接的两个表中的另一种方法
- 13. 通过javascript将url链接添加到href链接
- 14. 将SQL数据插入SQLite中的链接(外键)表中
- 15. 将外键列添加到表中。
- 16. 如何通过JS文件添加链接到表格
- 17. Django:通过表单创建时,将类与外键链接到另一个类
- 18. 如何通过递归添加链接列表中的元素?
- 19. Java - 通过文本UI将人员添加到链接列表
- 20. 如何将两个别名添加到通过MySql查询创建的表中?
- 21. 如何将两个表数据添加到C#中的Crystal报表中
- 22. jQuery将_blank添加到外部链接
- 23. 如何通过MySQL中的外键链接检索某些值?
- 24. SQL和外键:如何正确链接这两个表?
- 25. 如何将外键添加到现有的SQLite表中?
- 26. 如何在CRM 2011中添加外部链接到表单?
- 27. 通过javascript添加链接到图像
- 28. 将数据添加到Hive外部表
- 29. 如何将项目添加到Java中的链接列表中?
- 30. 如何通过sequelizejs中的外键找到数据?
谢谢马克......这正是我正在寻找的......这是在我的永久书签上。 – 2014-08-05 19:42:03