插入和更新

时间:2014-02-05 11:44:12

标签: sql tsql sql-update sql-insert

我从一张看起来像这样的表开始:

  

狗(身份证,性别,姓名)

决定创建一个新的所有者表。

  

所有者(身份证,姓名)

Owner-ID是GUID数据类型。

并将Dog表更新为:

  

狗(ID,性别,姓名,所有者ID)

由于数据库正被多个程序使用,并且并非所有程序都可以同时更新,因此决定不强制执行此新关系,因此允许OwnerID为Null值,但是狗的所有值都是所有者ID必须与Owner表中的值相对应。

现在我们已经达到了所有软件创建拥有所有者的狗的程度,但我们希望修复狗没有所有者的条目。

我们希望为目前没有所有者的每只狗创建一个空的所有者条目。 我们并不担心有两只拥有相同所有者的狗可以在必要时稍后进行修改。

实现这一目标的最有效方法是什么? 实际上我正在寻找

INSERT INTO [dbo].[Owner]
       ([ID],[Name])
 VALUES
       (newid(), 'n/a')

对于狗的所有者ID为空的每只狗。

然后更新

UPDATE [dbo].[Dog]
   SET [Owner_ID] = NewIDFromAbove

是否有任何单一陈述或类似的巧妙方式? Merge在这里有用吗?

1 个答案:

答案 0 :(得分:0)

您可以使用输出子句来解决此问题,例如

declare @newIds table(id nvarchar(255));
INSERT INTO [dbo].[Owner]
       ([ID],[Name])
      output inserted.id into @newIds  
 VALUES
       (newid(), 'n/a')