我使用PHP腳本使用ODBC更新如果ID存在,否則INSERT(ODBC)
我的工作表有一個「身份證」柱連接到Microsoft Access數據庫。如果SKU尚不存在,我想插入新記錄,否則,如果SKU存在,則只需更新該記錄。
這是什麼正確的SQL?是否有可能在一個查詢中完成?
我使用PHP腳本使用ODBC更新如果ID存在,否則INSERT(ODBC)
我的工作表有一個「身份證」柱連接到Microsoft Access數據庫。如果SKU尚不存在,我想插入新記錄,否則,如果SKU存在,則只需更新該記錄。
這是什麼正確的SQL?是否有可能在一個查詢中完成?
我寧願在2個查詢中做。
對我來說更新或插入他們是不同的業務邏輯。爲了讓代碼清晰明瞭,最好明確定義INSERT和UPDATE的邏輯。
而在技術上我沒有看到一個乾淨方式在一個SQL語句中。每個語句都必須以「動詞」開頭,即「UPDATE」或「SELECT」或「DELETE」或其他。或者,如果你堅持這樣做,你可以嘗試刪除潛在的現有人,然後再進行「插入」,但是你可能會得到一個不一致的身份證,這也可能導致問題。
或者如果「id」是主鍵,另一個愚蠢的方法是無論如何做一個「更新」,然後做「插入」。如果沒有有效的ID,更新將失敗,插入將成功。如果有有效的ID,更新將會成功並且插入將失敗。您將在沒有使用if-else邏輯的情況下完成,但每次都會出現SQL故障,這很愚蠢和醜陋。
這幾乎是我能想到的。
我不會建議在一個查詢中進行。在執行查詢以添加新值之前,檢查您要添加的值是否存在。
個人而言,我會將其留給應用程序邏輯而不是數據庫邏輯。你可以簡單地做:
if($id)
{
$sql = 'UPDATE ... WHERE id = ?'; // assuming use of parameterized query
}
else
{
$sql = 'INSERT INTO ...';
}
MySQL有'REPLACE INTO ...'。嘗試一下,如果它適用於MS Access。 –
[Upserting in MS-access]的可能重複(http://stackoverflow.com/questions/6199417/upserting-in-ms-access) – HansUp