在Sql Server中将目标表合并为Sql Server 2008中现有表的语句

时间:2014-03-05 08:25:55

标签: sql-server-2008 sql-server-2008-r2

问题:我在我的数据库中有表ARMS.RefRollno,现在有滚动否和排名我有查询返回滚动和排名的数据集。如果我的表包含该行,那么我需要更新它,如果不是我想插入一个关于该卷号的新行。

    create table #temp
    (
      ROLLNO varchar(100),
      Ranking varchar(100),
      TestRecID varchar(100)
    )
    INSERT INTO #temp (ROLLNO, Ranking,TestRecID) EXEC [ARMS].[GetStudentResultForUpdateRank] '412'

   MERGE ARMS.RefRollno AS C
    USING #temp AS CT
    ON C.TestRecID = CT.TestRecID
    WHEN MATCHED THEN
    UPDATE SET
    C.RefRank = CT.Ranking      
    WHEN NOT MATCHED THEN 
    INSERT (TestRecId,RefRollNo, RefRank,IsActive,CreatedDate)
    VALUES (CT.TestRecID,CT.ROLLNO,CT.Ranking, 1,getdate());
    drop table #temp
  

这里ARMS.RefRollno是我在数据库中的现有表。   任何帮助表示赞赏。

    ** Error by Sql Server:Incorrect syntax near 'MERGE'.**

1 个答案:

答案 0 :(得分:1)

更改

EXEC [ARMS].[GetStudentResultForUpdateRank] '412'

EXEC [ARMS].[GetStudentResultForUpdateRank] '412';

(注意添加后面的分号)。

如果数据库处于早于2008的兼容模式,这似乎是必要的。