2013-11-27 24 views
0
的ID

我正在SQL Server 2008的查詢在一個表中是否存在

繼是我的查詢,

CREATE PROCEDURE Usp_Travelready_Admin_AddUser   
    (  
    @pLoggedUserId AS INT, 
    @pMappedUser AS INT 
    )   
AS   
BEGIN 
    SET NOCOUNT ON 

    IF EXISTS 
    ( 
     INSERT INTO TESTUSER (Var_LoggedInUser, Var_MappedUSer)   
     VALUES (@pLoggedUserId, @pMappedUser) 
    ) 
    ELSE 
    (
     UPDATE TESTUSER 
     SET Var_MappedUSer = @pMappedUser 
     WHERE Var_LoggedInUser = @pLoggedUserId 
    ) 

    SET NOCOUNT OFF    
END 

其中TestUser用戶表包含2列Var_MappedUSerVar_LoggedInUser我想寫一個存儲過程來更新Var_MappedUSer如果Var_LoggedInUser已經存在於表中並且插入用戶(如果它在表中不可用)

我在上面存儲了什麼錯誤程序是什麼?如果

+0

您可以首先檢查表中用戶是否存在,方法是使用var_loggedInUser列上的條件表中的count(*)值。 如果用戶存在,則更新,否則只需插入。 –

+1

@pratikgarg:但是使用'IF EXISTS()'通常**非常受歡迎**,並且可以比使用COUNT(*)'快得多...... –

+0

這也是MERGE的一個好例子,您可能想要檢查,以獲得最佳結果。 – Kahn

回答

1

Exists檢查查詢返回的任何結果,以便做到這一點:

IF EXISTS (select * from TESTUSER where Var_LoggedInUser = @pLoggedUserId) 
begin 
    INSERT INTO TESTUSER (Var_LoggedInUser, Var_MappedUSer) 
    VALUES (@pLoggedUserId, @pMappedUser) 
end 
ELSE 
begin 
    UPDATE TESTUSER 
    SET Var_MappedUSer = @pMappedUser 
    WHERE Var_LoggedInUser = @pLoggedUserId 
end 

而且使用if.. else之間圓括號組操作是無效的,你必須使用begin .. end語法。

相關問題