将相同的GUID插入两个表中

时间:2013-05-10 16:08:12

标签: sql-server tsql insert output

我已经搜索了一个解决方案,并找到了几个例子,但没有一个完全适合我的场景。

我有一个[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

希望我明白这一点。如果您需要更多详细信息,请告诉我们。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用t-sql OUPUT子句来完成此任务。困难的部分是将新插入的table1记录与源相关联,以便您可以插入到table2中。这取决于您是一次还是按批次执行此一条记录。

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

答案 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

感谢您的回复。