我有一个存储过程,正在使用Merge语句进行插入和更新。这方面是我需要的。
但是,插入记录时的输出始终为1,我看不出为什么?如果有人可以复查此程序并让我知道我可能做错了,我将不胜感激。
CREATE PROCEDURE [dbo].[FileAdd]
@FileId int,
@FileData varbinary(max),
@ContentType Varchar(100),
@OperatorId int
AS
BEGIN
--In Memory Table to
DECLARE @MergeOutput TABLE
(
Id INT
);
--Merge needs a table to Merge with so using a CTE
WITH CTE AS (
SELECT @FileId as FileId)
--Merge
MERGE INTO [dbo].[Files] as T
USING CTE AS S
ON T.FileId = S.FileId
WHEN NOT MATCHED THEN
INSERT (
FileData,
ContentType,
OperatorIdCreated,
OperatorIdUpdated
)
VALUES(
@FileData,
@ContentType,
@OperatorId,
@OperatorId
)
WHEN MATCHED THEN
UPDATE SET
FileData = @FileData,
ContentType= @ContentType,
OperatorIdUpdated = @OperatorId,
Updated = GetDate()
OUTPUT
INSERTED.FileId
INTO @MergeOutput;
SELECT * FROM @MergeOutput;
END
GO
答案 0 :(得分:2)
您获得1的原因是因为这就是UPDATED
或INSERTED
。当它是UPDATED
的值时,则该值将传递到@FileID
中。
INSERTED是列前缀,用于指定由 插入或更新操作。
因此,无论值是UPDATED
(即@FileID
)还是INSERTED
(即您的FileID
表逻辑是什么),它将在您的计算机中返回码。如果您始终获得1,那么您必须始终更新FileID = 1
的列。
将底部更改为inserted.*
会向您显示,就像OUTPUT
会更新行一样。