2011-10-25 45 views
0

對於給定的Id,我想從DB表中選擇一條記錄。 如果記錄不存在,我想插入一些默認值並返回記錄。什麼是插入然後用tsql選擇的有效方法?

這樣做的最佳方法是什麼? 我的問題是插入然後選擇。這似乎效率低下。

+3

你正在使用哪個數據庫,比如說[Output clause](http://msdn.microsoft.com/en-us/library/ms177564.aspx)可能適用於sql server – V4Vendetta

+1

你有多大比例的時間希望記錄已經在那裏了? –

+0

它*似乎*或你證明了這一點? –

回答

0

如果該記錄不存在,並且您必須創建該記錄,則在此問題上沒有多少選擇。這個例外情況可能是,如果有問題的表沒有標識列或者任何計算列,並且基本上存在所有列。然後你可以插入它,然後從你放置的默認值中返回一個你初始化的對象。但是,如果您使用的是標識列或數據庫插入將爲您提供的任何其他內容(包括觸發器),則除插入後選擇數據外,您無法做其他任何事情。

2

我會試圖插入,用「WHERE NOT EXISTS」條件,然後選擇該行,我們知道在這一點上*確實存在:

INSERT INTO <Table> (<Columns>) 
SELECT <Column Values> WHERE NOT EXISTS(SELECT * FROM <Table> WHERE <Key Column Match Conditions>) 

SELECT <Select Columns Needed> FROM <Table> WHERE <Key Column Match Conditions> 

這有它總是返回一個好處單一的結果對任何的調用它 - 一些解決方案(例如INSERT與OUTPUT和一個選擇,任何方式)產生多個結果集,這可能無法正常工作,無論是消費輸出。


*除非你在一個有潛力的比賽是還從表中刪除 - 但是你有沒有提到這種可能性還,所以我們不知道所需的輸出會是什麼,如果刪除立即發生插入後。

+0

+1,我認爲作者應該接受這個答案,而不是我的。我完全忘記了INSERT..INTO ... SELECT範例。 –

相關問題