2
我在C#中有一個插入方法。本質上,下面,其中URL是在表中唯一contraint:插入並返回插入的行數(非重複)和記錄的ID(新的或重複的)
INSERT INTO pages
(url) VALUES ('http://www.google.com');
在一個單一的查詢我想獲得:
- 無論是插入行或條目的ID已經存在
- 插入(不包括已存在的重複)
我原先調用插入上述使用的ExecuteNonQuery和捕捉MYS所見的行數QL重複異常(可能使用了INSERT IGNORE,但由於查詢的另一部分知道它不失敗)。這使我得到了實際插入的行數的準確計數,但沒有提供在重複情況下檢索id的方式(如果行重複,則command.LastInsertedId返回-1)。
我再變聲明如下:
INSERT INTO pages
(url) VALUES ('http://www.google.com')
ON DUPLICATE KEY UPDATE id= LAST_INSERT_ID(id);
這能夠正確更新command.LastInsertedId財產,當然不再拋出一個異常,因爲更新漁獲從的ExecuteNonQuery返回1,看似提供沒有辦法確定該行是插入還是重複。
在使用.NET(C#)適配器確定記錄的id和插入行數方面,最好是使用單個語句來確定最佳選擇是什麼?
有沒有一種方法可以設置我的查詢中受影響的行數?有沒有一種方法可以爲我提供兩條信息,而不會有明顯的性能下降?