SQL SERVER - 使用JOIN返回OUTPUT INSERTED。*?

时间:2017-02-11 10:54:53

标签: sql-server join sql-server-2008-r2

我有这个SQL服务器查询工作正常 它返回完整的插入行。

INSERT INTO Comments
  (
    ImageID,
    UserId1,
    CommentTxt
  ) OUTPUT INSERTED.* 

SELECT 1620,
       @userid1,
       'abc' 

但是我需要将加入的信息返回到该插入的行(我也想要评论的用户)

所以我试过这个:

INSERT INTO Comments
  (
    ImageID,
    UserId1,
    CommentTxt
  )OUTPUT INSERTED.* JOIN Users u ON INSERTED.userid1 = u.UserID
SELECT 1620,
       @userid1,
       'abc' 

结果:

  

消息156,级别15,状态1,行13关键字附近的语法不正确   ' JOIN'

问题:

是否可以将OUTPUTJOIN一起使用?

<子> 基本上我之后:Inserted.*,relevant_user.* 在同一个热门。

- NB
想要获取scope_identity并重新选择该表。

1 个答案:

答案 0 :(得分:3)

如果确保Users中只有一个匹配行,那么您可以使用MERGE

如果可能有0个匹配行或大于1个,那么这将不具有与所需语法相同的语义,因为连接是在插入之前而不是之后执行的。

WITH Source
     AS (SELECT *
         FROM   (VALUES(1620, @userid1, 'abc')) 
                    V(ImageID, UserId1, CommentTxt)
                JOIN Users u
                  ON v.userid1 = u.UserID)
MERGE INTO Comments
USING Source
ON 1 = 0
WHEN NOT MATCHED THEN
  INSERT ( ImageID,
           UserId1,
           CommentTxt )
  VALUES (ImageID,
          UserId1,
          CommentTxt)
OUTPUT Source.*;