回答
類似:
if exists(select * from table where date = @date)
update table set amount = @amount where date = @date
else
insert table (amount, date) select @amount, date
假設您至少有SQL Server 2008中,你可以使用MERGE關鍵字。此關鍵字專門針對您的案例添加了。你指定一個MERGE子句(基本上是一個連接),然後聲明告訴它當它找不到或找不到匹配時如何處理。
在底部有一個體面的例子,顯示了目標表和源自一行參數中創建的「表」之間的合併。熬下來了一點,你可以使用類似:
MERGE [TargetTable] AS target -- This is the table we'll be updating
USING (SELECT @Date) AS source (Date) -- These are the new values
ON (target.Date = source.Date) -- Here we define how we find a "match"
WHEN MATCHED THEN -- If the date already exists:
UPDATE SET Amount = @Amount
WHEN NOT MATCHED THEN -- If the date does not already exist:
INSERT (Date, Amount) VALUES (@Date, Amount)
注意,嵌套UPDATE
和INSERT
條款不指定表。這是因爲當我們定義我們的目標表(在MERGE
關鍵字後指定的表)時,我們已經告訴SQL Server哪個表執行這些操作。
更新:此功能顯然是SQL Server CE的not supported,所以它不適用於您的特定情況。我在這裏留下這個答案,因爲它可能會幫助其他人嘗試在完整版SQL Server中執行類似的操作。 對於SQL Server CE解決方案,請查看BJury's的答案。
不幸的是,[ce不支持合併](http://stackoverflow.com/questions/14091092/does-sql-server-ce-supports-merge-statement),但對MERGE的一個非常好的解釋的榮譽。 – StuartLC
這很傷心。這對於這種情況非常有用。感謝您指出了這一點。 –
如果您使用的是nhibernate ORM,那麼您可以使用SaveOrUpdate會話方法。
作爲IF .. NOT EXISTS
的替代方法,您可以聲明一個UPDATE,並回退一個插入。如果數據通常已經存在,這通常是相當高效的UPSERT
模式。
UPDATE MyTable
SET Amount = @NewAmount
WHERE Date = @Date;
IF @@ROWCOUNT = 0
INSERT INTO MyTable(Amount, Date) VALUES (@NewAmount, @Date);
而且它看起來像CE不支持[@@ ROWCOUNT](http://technet.microsoft.com/en-us/library/ms173372.aspx) – StuartLC
- 1. MYSQL:插入記錄,如果它已經存在更新記錄
- 2. Mysql觸發器插入記錄或更新,如果它已經存在?
- 3. 插入或更新如果記錄已存在MySQL
- 4. 如何檢查記錄是否已經存在,然後更新或插入laravel?
- 5. ANSI SQL問題 - 如何插入或更新記錄(如果它已存在)?
- 6. 插入或更新,如果已經存在 - 預處理語句
- 7. 更新記錄,如果失敗,插入記錄,然後更新
- 8. Mongorestore更新記錄,如果已經存在沒有 - 滴
- 9. 插入到mysql數據庫,如果記錄已經存在,則更新
- 10. 如果記錄已經存在,請停止插入表中
- 11. 防止插入如果記錄已經存在於iphone sqlite
- 12. 插入SQL表或更新記錄(如果存在)
- 13. 查詢插入或如果需要更新記錄
- 14. PHP PDO插入批量記錄或更新(如果存在)
- 15. 更新,插入到SQL ..有已經與
- 16. 更新記錄,如果它已經存在與vb
- 17. 更新,如果記錄已經存在於今天的日期
- 18. mongo插入記錄如果存在或使用php更新mongo中的記錄
- 19. 如何更新sqlite表,如果記錄存在其他插入?
- 20. Mysql觸發器來插入記錄或更新計數,如果它已經存在?
- 21. 更新,而不是插入,如果行已經存在
- 22. 插入,如果它已經存在更新的列SQL
- 23. SQL更新,如果已經存在,否則插入
- 24. 插入數據,更新如果「ID」的存在已經
- 25. 如何更新舊記錄時插入新記錄?
- 26. 如果記錄已存在,則更新,但如果記錄不存在則插入
- 27. SQL如果數據已經在表中執行插入或更新
- 28. Sails.js模型 - 插入或更新記錄
- 29. laravel插入或更新相關記錄
- 30. 更新或插入取決於記錄是否已存在
請提供表格的CREATE語句。 – anna