2010-06-15 58 views
0

我有一個很大的表,有很多行,每一行都有一些日期的每個用戶的統計信息。顯然,我沒有任何未來統計數據。所以要更新我使用的統計數據有關使用SQL Server插入/更新行的問題(ASP.NET MVC)

UPDATE Stats SET [email protected] WHERE ... a lot of conditions ... AND [email protected] 

但是如果該行不存在?我必須使用

INSERT INTO Stats (...) VALUES ([email protected], ..., [email protected]) 

如何檢查行是否存在?與COUNT(*)有什麼不同嗎?

如果我用空單元格填充表格,則需要數十萬行以兆字節爲單位並且不存儲數據。

回答

0

我傾向於在那些情況下做的僅僅是執行以下(僞代碼,因爲我是一個DB2人自己):

try: 
    INSERT 
catch already-exists: 
    try: 
     UPDATE 
    catch anything: 
     generate error 

你可以做到以相反的順序,如果你更可能有比行不:第一

try: 
    UPDATE 
catch not-there: 
    try: 
     INSERT 
    catch anything: 
     generate error 

從未測試的DBMS,因爲數據庫可以改變UND在測試和執行之間的下方(「比請求許可更好地請求原諒」原則)。

0

不幸的是,SQL Server沒有任何類型的「INSERT OR UPDATE」命令(我知道),就像一些數據庫引擎一樣。這意味着您必須首先檢查該行或按照其他答案推薦的方式捕獲錯誤。希望你的行有一個人爲的主鍵,所以你可以首先使用WHERE條件查詢該鍵,然後,如果返回一行,則執行UPDATE ... WHERE key = ...,否則執行INSERT。這樣你就不會整個查詢運行兩次。

+4

SQL Server 2008中肯定不會! http://technet.microsoft.com/en-us/library/bb510625.aspx – 2010-06-15 05:06:24

+0

有趣的 - 謝謝!這不是很明顯,寫起來也不容易,但它解決了這個問題。 – EMP 2010-06-15 05:25:13