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