我已经搜索了一个解决方案,并找到了几个例子,但没有一个完全适合我的场景。
我有一个[source]表和两个目标表[table1]和[table2]。 [table1]和[table2]都有一个Id列(UniqueIdentifier)。 [table1]中的所有列都有默认值,包括UniqueIdentifier。
[table1]是[table2]的父级,包含用于跟踪插入,修改,删除记录的日期时间数据。 [table2]是一个详细信息表,描述了[table1]中的记录。
我需要从[source]中选择SELECT,并且INSERT到[table1]和[table2],在[table1] insert期间保留Id生成,所以我可以将这个相同的Id插入到[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
希望我明白这一点。如果您需要更多详细信息,请告诉我们。谢谢!
答案 0 :(得分:0)
您可以使用t-sql OUPUT
子句来完成此任务。困难的部分是将新插入的table1记录与源相关联,以便您可以插入到table2中。这取决于您是一次还是按批次执行此一条记录。
答案 1 :(得分: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
感谢您的回复。