代码之家  ›  专栏  ›  技术社区  ›  kateroh

在一个t-sql查询中更新输出中的内部联接

  •  14
  • kateroh  · 技术社区  · 14 年前

    需要将更新输出返回的结果集与另一个表进行内部联接并返回结果。有可能吗?

    下面是一个小例子:

    CREATE TABLE [dbo].[Customers]
    (   
       [CustomerId] [int],   
       [CustomerName]  [nvarchar](50)
    )
    GO
    
    CREATE TABLE [dbo].[Orders]
    (   
       [OrderId] [int],   
       [OrderName]  [nvarchar](50)
    )
    GO
    
    CREATE TABLE [dbo].[CustomerOrders]
    (   
       [CustomerId] [int],   
       [OrderId]  [int]
    )
    GO
    
    INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (1, 1)
    INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (1, 2)
    INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (2, 1)
    GO
    

    需要更新CustomerOrders表上的OrderId并返回客户的名称,所有这些都在一次快照中完成。到目前为止,我只能返回customerid:

    UPDATE CustomerOrders SET OrderId=NULL 
    OUTPUT Deleted.CustomerId
    WHERE OrderId='1'
    
    1 回复  |  直到 14 年前
        1
  •  29
  •   OMG Ponies    14 年前

    TSQL/SQL Server 2005+支持UPDATE子句中的联接-请参见 documentation :

    UPDATE CUSTOMERORDERS
       SET orderid = NULL
    OUTPUT c.customername
      FROM CUSTOMERORDERS co
      JOIN CUSTOMERS c ON c.customerid = co.customerid