2016-11-18 49 views
1

我只需要在表中插入一條記錄,如果它不存在。
在任何情況下,我想返回id列(如果找到記錄)或最後使用的id列(如果記錄是新的)。SqlServer:如何檢索一個現有的ID或最後一個ID

if exists (select id from DataElement where bytepos=0 and bitpos=0 and byteorder=0) 
    select id from DataElement where bytepos=0 and bitpos=0 and byteorder=0 
else 
begin 
    insert into DataElement values ('SID','',0,0,0,8,129); 
    select scope_identity() as id 
end 

這個腳本沒問題,但我想避免運行兩次SELECT操作。
如果我只返回

select id 

我收到錯誤 「無效列 'ID'」。
如果有辦法存儲第一個select的返回記錄並將其返回,如果是這種情況?

+1

'我想避免運行SELECT operation.'兩次爲什麼? *他們是兩種不同的**操作。* –

+0

這是完美的邏輯,易於閱讀和易於維護 - 爲什麼你想避免2選擇語句? – bassrek

+0

如果記錄存在,我希望避免運行兩次'select id from ...' – SteMMo

回答

4

使用一個變量:

DECLARE @id int 
SELECT TOP 1 @id = id from DataElement where bytepos=0 and bitpos=0 and byteorder=0 
IF @id IS NULL 
begin 
    insert into DataElement values ('SID','',0,0,0,8,129); 
    select @id = scope_identity() 
end 
+0

我還添加了'else select @id as id',否則SS只返回'命令成功完成'。沒有價值 – SteMMo