0
這是MERGE命令的合適人選嗎?在將INSERT UPDATE轉換爲MERGE時需要幫助
源數據也必須是另一個表,還是可以通過變量?
如果它必須是一個表,是否將傳遞的變量插入到臨時表中?
你能幫我一下嗎?
CREATE PROCEDURE [dbo].[usp_ConvertToMerge]
@GL_DT date
,@SRC_SYS_ID varchar(60)
,@MLR_SRC_SYS_CD char(3)
,@TRSRY_FEED_DT date
,@Data varchar(20)
AS
BEGIN
IF NOT EXISTS (SELECT
@GL_DT
FROM
MLR_REBATE_IBOR_INFO_2
WHERE
[GL_DT] = @GL_DT
AND [SRC_SYS_ID] = @SRC_SYS_ID
AND [MLR_SRC_SYS_CD] = @MLR_SRC_SYS_CD
AND [TRSRY_FEED_DT] = @TRSRY_FEED_DT)
BEGIN
INSERT INTO [dbo].[MLR_REBATE_IBOR_INFO_2]
([GL_DT],
[SRC_SYS_ID],
[MLR_SRC_SYS_CD],
[TRSRY_FEED_DT],
[Data])
SELECT
@GL_DT
,@SRC_SYS_ID
,@MLR_SRC_SYS_CD
,@TRSRY_FEED_DT
,@Data
END
ELSE
BEGIN
UPDATE [dbo].[MLR_REBATE_IBOR_INFO_2]
SET [Data] = @Data
WHERE [GL_DT] = @GL_DT
AND [SRC_SYS_ID] = @SRC_SYS_ID
AND [MLR_SRC_SYS_CD] = @MLR_SRC_SYS_CD
AND [TRSRY_FEED_DT] = @TRSRY_FEED_DT
END
END
GO
是的,這是合併一個很好的候選人。 MERGE旨在阻止這是單獨的交易問題。您知道IF NOT EXISTS可以返回true,但在您更新時可能是false,對吧?如果您執行UPDATE,並且插入@@ rowcount = 0,那麼它是相同的,儘管這種方法對我來說一直比較乾淨(少一次掃描=較少的阻止/鎖定)。 – 2012-03-06 00:27:03