2014-10-06 42 views
0

我已經創建了一個存儲過程,該存儲過程根據一個條件返回表中最後插入的行的ID。數據庫中已經存在一個對象SQL Server

條件是這樣的,如果被插入的行已經存在,那麼它將採用該行的標識列,否則它向該表中插入一個新行。

要做到這一點,我已經在存儲過程中

ALTER PROCEDURE [dbo].[Test_Procedure] 
    @description nvarchar(max) 
AS 
BEGIN 
    DECLARE @tempId int; 

    SELECT CommentId 
    INTO tempId 
    FROM TestTable 
    WHERE description = @description; 

    IF @tempId IS NULL 
    BEGIN 
     INSERT INTO TestTable 
     VALUES (@description); 

     SELECT scope_identity(); 
    END 
    ELSE 
    BEGIN 
     SELECT @tempId FROM dual; 
    END 

    DROP TABLE tempId; 
END 

寫了下面的代碼,當我運行上面的存儲過程,第一次成功,然後運行在它開始嘔吐以下錯誤消息

病房

Msg 2714,Level 16,State 6,Procedure Test_Procedure,Line 15
數據庫中已經有一個名爲'tempId'的對象。

我不理解的位是tempId被用作變量而不是表格。我看到有類似問題的人,但在他們的情況下,他們使用臨時表

我真的很感謝你幫助解決上述問題。

+3

這是因爲第一次運行它時,表tempId不存在。但下一次運行它時,該表已經創建完畢。 – 2014-10-06 15:38:10

回答

1

試試這個語法來設置你的變量。

SELECT @tempId = CommentId from TestTable where description = @description; 

當前您的'select into'正在數據庫上創建一個表'tempId'。

+0

非常感謝你解決了我的問題 – user1737473 2014-10-06 16:07:51

相關問題