2014-04-18 44 views
0

我正在編寫一個應用程序,它將插入如果找不到主鍵或更新,如果它被發現。 這是在本網站上詢問here的相同類型的情況。更新如果退出或插入,如果不是

問題。

現在我正在使用下面的代碼插入。 (名稱已更改,但格式相同)

Using con As New SqlConnection 
      Using cmd As New SqlCommand 
       Try 
        con.ConnectionString = "removed" 
        con.Open() 
        cmd.Connection = con 
        cmd.CommandText = "INSERT INTO [table] ([primary key],[value]) VALUES (@primary key, @value)" 
        cmd.Parameters.AddWithValue("@primary key", code to grab key) 
        cmd.Parameters.AddWithValue("@value", code for value) 
        cmd.ExecuteNonQuery() 
        con.Close() 
       Catch ex As Exception 
        MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records") 
       End Try 
      End Using 
     End Using 

上面的完整代碼適用於我。 但現在我需要它只做插入的主鍵沒有找到。

基於上面的鏈接,是答案做這樣的事

cmd.CommandText = "Merge Table as target using (values ('key') as source(key) on taget.idfield = code for key... 

這感覺不對我說,(可能是因爲它的所有在一行上)。什麼是完成此任務的最佳方式?

+3

寫一個'select',然後是一個'update'或'insert'取決於它是否存在有什麼問題? – paqogomez

+0

這是我的第一個想法,但我想確保這是正確的做法。 – Itomship

+0

我想你會發現'合併'雖然整潔,但隨着時間的推移難以維持。 KIS - 保持簡單。 – paqogomez

回答

2

Merge絕對是完成此任務的好方法。你的代碼應該看起來類似於:

cmd.CommandText = 
@" 
    Merge into Table as Target 
    Using (Select @PrimaryKey As PrimaryKey) As Source 
     On Target.PrimaryKey = Source.PrimaryKey 
    When not matched then 
     Insert (PrimaryKey, Value) 
     Values (@PrimaryKey, @Value) 
    When matched then 
     Update 
     Set Value = @Value 
    ; 
"; 
1

選擇並插入/更新需要2次到數據庫。

所以這裏只是一個:

MERGE INTO yourTable target 
USING (select val1 as key1, val2 as key2... from dual) source 
ON (target.primary_key = source.key1) 
WHEN MATCHED THEN UPDATE SET target.column2 = source.key2.... 
WHEN NOT MATCHED THEN INSERT (target.primary_key, target.column2, ...) 
VALUES(source.key1, source.key2, ...)  

我使用的是Oracle語法, 其他數據庫上會有所不同(SQL服務器,例如轉換傳入的參數爲數據集:「選擇VAL1爲KEY1, ...')

+0

您不必單獨訪問數據庫,我可以在SQL中完成所有功能。他還標記Sql不是Oracle ... – Codexer

+0

@MrCoDeXeR,sql並不意味着sql server。當然,它很可能,也標記了vb.net,它的sql服務器。但不能保證。 – paqogomez

相關問題