将MERGE转换为T-SQL命令

时间:2012-05-22 11:45:05

标签: sql-server-2008 merge

我有一个T-SQL MERGE命令在我的SQL Server 2008上运行正常。不幸的是,代码也必须在SQL Server 2005数据库上运行。

我需要更改什么才能使以下代码在SQL Server 2005中运行?

感谢您的帮助。

DECLARE @CNVAL varchar(100) = 'xyz' DECLARE @ATRBT varchar(100) = 'abcde' DECLARE @CON varchar(100) = 'fgh' 
MERGE into CNEXTR as target
USING (VALUES( @CON, @ATRBT, @CNVAL))
     AS source([Name], ATTR, CNVAL)
     ON (target.[Name] = source.[Name])
     AND (target.ATTR = source.ATTR)
WHEN MATCHED THEN 
     UPDATE SET 
         CNVAL = source.CNVAL 
WHEN NOT MATCHED THEN 
     INSERT([Name], ATTR, CNVAL) 
     VALUES(source.[Name], source.ATTR, source.CNVAL);

1 个答案:

答案 0 :(得分:5)

将此更改为

BEGIN TRAN

   UPDATE CNEXTR
   SET CNVAL = @CNVAL
   WHERE [Name] = @CON AND ATTR = @ATRBT;

   IF @@ROWCOUNT = 0
       INSERT CNEXTR ([Name], ATTR, CNVAL)
       VALUES(@CON, @ATRBT, @CNVAL);

COMMIT TRAN

每个陈述都比MERGE

简单得多