2014-03-05 81 views
0

问题:我在我的数据库中有ARMS.RefRollno表,并且带有roll no和rank现在我有查询正在返回roll和rank的数据集.If我的表中包含该行,那么我需要更新它,如果不是,我想插入一个新的行相对于该卷没有。在Sql Server 2008中将目标表合并到Sql Server 2008中作为现有表的Sql server中的语句

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

Sql服务器不允许我使用目标表作为现有的表。 –

+0

@ user1598415 - 不,你误解了这个问题。合并始终针对现有的表格。 –

回答

1

变化

EXEC [ARMS].[GetStudentResultForUpdateRank] '412' 

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

(注此外尾随分号)。

这似乎只有在数据库处于比2008年更早的兼容模式时才有必要。

+0

现在确实thanx很多,它现在正常工作... –