我有这个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'
问题:
是否可以将OUTPUT
与JOIN
一起使用?
<子>
基本上我之后:Inserted.*,relevant_user.*
在同一个热门。
-
NB
我不想要获取scope_identity并重新选择该表。
答案 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.*;