请耐心等待我解释我的情况。 我有以下两个表格:在插入两行中的一行时捕获两行之间的关系
Items(id, plan, free)
- 'id'是标识列。
ItemsIncludes(MasterId, IncludeId)
有两种类型的项目 - 购买和免费(包括)。无论如何,这两种类型的项目都存储在Items表中(显然,根据类型设置了“free”位字段)。 ItemsIncludes表建立了一个购买的项目(MasterId)和包含的免费项目(IncludeId)之间的一对多关系。
第1步是从购物车插入购买的物品(没问题)。
步骤2是根据购买物品的计划(与面临的问题无关)插入每个购买物品的免费物品。
第3步是将在前两个步骤中生成的ID以正确的关系插入到ItemsIncludes表(问题)中。
要求是捕获插入期间生成的免费itemId及其购买的itemId。输出条款会做这个,如果下面是合法的:
步骤2--
Declare @ItemsIncludesIntermediate table(MasterId int, IncludeId int)
Insert into Items
(PlanId, IsFree)
Output it.ID -- Illegal
, inserted.ID into @ItemsIncludesIntermediate
Select pli.IncludePlanId, 1
From Items it
Join PlansIncludes pli on it.PlanId = pli.MasterPlanId
该计划的结构也相似,但不相关的,因此没有描述手头的问题。
在插入期间,SQL Server不允许在输出子句中引用除插入的列之外的其他字段;然而,在更新/删除的情况下,它是不一样的,在这种情况下,引用参与FROM列表的任何标识符的语句被允许。 E.G .:
注意:我没有运行以下示例,但它是合法的。
Delete Items
Output iti.MasterID, deleted.ID into @ItemsIncludesIntermediate
From items it
Join ItemsIncludes iti on it.ID = iti.IncludeId
总之,如果我不能做到这一点与输出条款,那我怎么才能获取免费的itemId为正在与这就是BEING生成它的购买的itemId一起产生的呢?
我打开查看,而不是触发器的方法,如果可能的话。根本的是我不想改变结构。例如。我不想删除ItemsIncludes表并将MasterItemId包含到Items表中。
问题看起来简单的在第一,但现在让我心烦
谢谢!有效。我已经融合在一起,但与您在相关问题中存在着同样的疑问。它实际上似乎是黑客合并的文件目的,但它看起来似乎没有其他的最佳解决方案。 – 2011-05-04 10:16:28