将两个插入与子查询混合?

时间:2015-06-02 10:29:42

标签: sql sql-server ssms

我正在将数据插入数据库,有

UnitChaine

[id],[FK_Unit],[DateIn],[DateOut]

和Personnal

[FK_VW_PERSONNAL],[FK_UnitChaine]

这里我有一个创建的FK_VW_PERSONNAL id列表,我必须将它们插入Personnal和UnitChaine。

我要插入UnitChains然后获取插入的id然后创建personnal:

INSERT INTO [dbo].[pstl_UnitChaine]
           ([FK_Unit]
           ,[DateIn]
           ,[DateOut])
     VALUES
           (1
           ,NOW
           ,NULL)

然后搜索插入[pstl_UnitChaine]的[id]并插入新的personnal:

INSERT INTO [Personnal]
           ([FK_VW_PERSONNAL]
           ,[FK_UnitChaine])
     VALUES
           (id from my list
           ,id I found from insert)

但是我觉得有一种最快的方法可以做到这一点而且我不是一个SQL杀手,所以如果你可以指导我/向我展示一些可以改善编码痛苦的东西,那将是非常了不起的: - )

修改: 在PaulFrancis提议之后,我有一个问题:

There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
插入[pstl_UnitChaine]后

第二次插入juste:

INSERT INTO [dbo].[Personnal] ([FK_VW_PERSONNAL].[FK_UnitChaine]) VALUES (2118, SCOPE_IDENTITY())

1 个答案:

答案 0 :(得分:1)

您可以使用IDENTITY。只需确保在执行此操作之前发生了UnitChaine的INSERT

INSERT INTO [dbo].[pstl_UnitChaine]
       ([FK_Unit]
       ,[DateIn]
       ,[DateOut])
 VALUES
       (1
       ,NOW
       ,NULL)

INSERT INTO [Personnal]
       ([FK_VW_PERSONNAL]
       ,[FK_UnitChaine])
 VALUES
       (100
       ,SCOPE_IDENTITY())

SCOPE_IDENTITY()获取INSERT的标识,该标识位于范围内。