我有一個服務,複製數據並做修改等。其中的功能僅僅是直複製刪除和插入對面這是很好的數據庫,方便地實現使用實體,不幸的是更大的查詢成爲很慢,所以我只是想將它作爲原始SQL查詢來運行。SQL參數並插入
這就是現在正在foreach循環的形式,並通過
即
if(deletes.Count() > 0)
{
// Build up delete string
StringBuilder sqlCommand = new StringBuilder("DELETE FROM RandomTable WHERE ");
List<string> rows = new List<string>();
foreach(var item in query)
{
rows.Add(string.Format("(Key1 = '{0}' AND Key2 = '{1}' AND Key3 = '{2}' AND Key4 = '{3}' AND Key5 = '{4}')",
item.Key1, item.Key2, item.Key3, item.Key4, item.Key5));
}
sqlCommand.Append(string.Join(" OR ", rows));
sqlCommand.Append(";");
runyoubadthing(sqlCommand);
}
建立基於什麼飼料查詢(請注意,我提報價和垃圾,但不現在我知道他們需要參數化(但是上面的服務只是在數據庫之間進行會話,所以技術上不應該需要它,但我仍然希望遵循良好的實踐)。
我的問題是:我怎麼會做上述正確的參數化查詢在那裏它可以作爲一個單一的查詢運行,而不是運行成千上萬的單個刪除的這將需要大量的地獄更久?
邊注:這整個的考驗將是約1000倍,更好地與單次自動遞增的ID,遺憾的是這不是我的數據庫,現在我要處理多達10個主鍵噩夢尋找獨特的數據
如果你的數據庫支持的話,你可以用它代替在不同的參數發送的每個值表值參數。這樣,您可以每次刪除(或插入)一整套而不是一行。但是,請注意,這也意味着如果一個刪除(或插入)失敗,那麼在該數據表中發送的所有內容都將失敗。 –
@ZoharPeled的數據庫是SQL Server 2005中,從有關表值參數的文件似乎開始嘗試2008年試運行,但以失敗這是一個有點開溜的。我可能會考慮把整個事情轉換成直接的數據表,並檢查它的速度 – Rando
你是對的。表值參數在SQL Server 2008中啓動。 –