让我们说我有三个以多对多关系实现的表。像Person(personID),PersonMovies(personID,movieID)和Movies(movieID)之类的东西。在sql server中进行多次插入的正确方法是什么?我想插入这个人,电影,然后能够获得一个人拥有的所有电影。那么交易中会有三个插入吗?如果是这样,我会假设简单的部分插入到person和movie表中,但是如何插入PersonMovies表,因为该表依赖于其他两个表中的现有ID。我假设我将插入Person和Movies,然后某种方式设置将新插入的表的ID分配给这两个表中的变量,然后使用这些变量插入桥表。我不知道,但我希望这有点意义,因为我对此感到困惑!!
答案 0 :(得分:0)
我假设你有人和电影自动增加。如果是这种情况,您需要捕获插入后的关键字段。您可以使用scope_identity()函数来获取此值。在每次插入之后,将它们保存到变量中,然后当您进入PersonMovies时,使用保存的值。
答案 1 :(得分:0)
首先插入Person记录,然后使用SCOPE_IDENTITY获取插入记录时的唯一ID。然后,您可以使用此功能插入人物电影。在插入人物电影之前,您需要使用IF EXISTS查看是否存在。如果它从现有表中选择它并将其唯一ID分配给变量。如果它还不存在,请使用相同的技术添加人物并插入电影,然后将SCOPE_IDENTITY指定给电影变量。
在PL / SQL中有一个UPSERT语句,它结合更新记录或在需要时插入它们。我在下面添加了一个代码,用于在T / SQL中执行UPSERT并在必须创建记录时返回唯一ID。
IF EXISTS (SELECT id FROM dbo.sysobjects WHERE name = 'fts_upsert_team') DROP PROCEDURE fts_upsert_team
GO
CREATE PROCEDURE fts_upsert_team
@teamID INT OUTPUT,
@name VARCHAR(100)
AS
UPDATE
fts_teams
SET
name = @name
WHERE
teamID = @teamID
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO fts_teams
(
name
)
VALUES
(
@name
)
SET @teamID = SCOPE_IDENTITY()
END
GO