0

我已经为此寻找解决方案,并找到了几个示例,但没有一个完全适合我的场景。

我有一个 [源] 表和两个目标表 [table1] 和 [table2]。[table1] 和 [table2] 都有一个 Id 列(UniqueIdentifier)。[table1] 中的所有列都有默认值,包括唯一标识符。

[table1] 是 [table2] 的父级,包含日期时间数据,用于跟踪记录的插入、修改和删除时间。[table2] 是一个明细表,描述了 [table1] 中的记录。

我需要从 [source] 中选择全部,然后 INSERT 到 [table1] 和 [table2],保留在 [table1] 插入期间生成的 Id,因此我可以将相同的 Id 与从 [source] 中选择的数据一起插入 [table2] .

[source]
col1, col2, col3, col4 <------This data needs to be inserted into [table2]

[table1]
Id*, date-created, date-modified, to-date <-------these all have default values

[table2]
Id*, name, description, category <-------Id generated in [table1] needs to match here

希望我说清楚了。如果您需要更多详细信息,请告诉我。谢谢!

4

2 回答 2

0

您可以使用 t-sqlOUPUT子句来完成此操作。困难的部分是将新插入的 table1 记录与源相关联,以便您可以插入 table2。这取决于您是一次记录还是分批记录。

http://msdn.microsoft.com/en-us/library/ms177564.aspx

于 2013-05-10T16:12:12.873 回答
0

阅读https://stackoverflow.com/a/3712735/2370655后,我已经能够解决我的问题

CREATE PROCEDURE Import_ManagedEntity_Insert 
@TypeId int,
@CategoryId int

AS
BEGIN

SET NOCOUNT ON;

MERGE INTO ManagedEntityDetail AS med
USING z_test AS source_table
ON 1=0
WHEN not matched THEN INSERT (Id, QualifiedName, DisplayName, Description, CategoryId)
VALUES (newid(), source_table.Url, source_table.Name, source_table.Description, @categoryid)
OUTPUT inserted.id, @typeid, getutcdate(), getutcdate(), 'system', null
INTO ManagedEntity;

END
GO

感谢您的回复。

于 2013-05-11T07:11:03.910 回答