将OUTPUT与连接表一起使用

时间:2011-09-27 00:52:14

标签: sql sql-server sql-server-2005

为什么以下不起作用?

INSERT INTO dbo.Pending_Break 
  (Pending_Pod_ID, Break_Date_Time, Break_Length, Booked_Length)            
OUTPUT INSERTED.Pending_BH_ID -- This is the inserted identity
     , INSERTED.Pending_Pod_ID
     , INSERTED.Break_Name
     , INSERTED.Break_Date_Time
     , pb.PENDING_BH_ID  -- complains on this one
  INTO #InsertedPendingBreaks
 SELECT ippod.Pending_Pod_ID,  
        pb.Break_Date_Time
        pb.break_length,  
        0
   FROM PendingBreak pb
   JOIN InsertedPod ippod ON ...

我可以在OUTPUT子句中使用除Inserted或Deleted之外的任何内容吗?

2 个答案:

答案 0 :(得分:3)

  

我可以不在OUTPUT中使用除已插入或已删除之外的任何内容   条款?

不,你不能。至少没有insert。在SQL Server 2008中,您可以将insert转换为merge语句,然后可以在输出子句中使用源表中的值。

在SQL Server 2008中查看此问题如何执行此操作。Using merge..output to get mapping between source.id and target.id

答案 1 :(得分:0)

inserteddeleted表仅在DML触发器中可用。我不确定你是否只是从触发器中提取了一个代码片段,但如果这是一个独立的批处理,那么它将无法工作。

此外,没有更新的表格。更新是删除,然后是插入。 deleted包含旧数据,inserted包含更新的新数据。