我正在編寫一個SQL腳本來更新已部署應用程序的數據庫(添加一些表並複製/更新一些數據)以適應添加到應用程序(.NET使用C#)的新功能。我已經在應用程序中編寫了一些代碼來處理這種更新(只要有新的更新可用,運行它的.sql),它可以重用於所有數據庫更新(只需提供一個新的.sql)即可。用於此功能的SQL或LINQ?
現在我遇到的問題是,我對SQL相當陌生,並且有一個非常短的時間表來準備好此更新。更新的更復雜的部分可能很容易被寫入應用程序,但爲了一致性的緣故,我想用SQL來完成。
我需要做的,我歸納爲以下算法/僞代碼:
for each category in allCategories
Select * from unrankedEntities
where Category = category
order by (score)
take top Category.cutoff
insert each of these into rankedEntities with rank = 0
Select * from unrankedEntities
where Category = category
order by (score) DESC
take top 16 - Category.cutoff
insert each of these into rankedEntities with rank = null, belowcutoff=true
這是一般的算法,我想實現(一對夫婦更多的調整這部分後進行做完了)。在SQL中編寫這個代碼或者只是編寫LINQ來執行它(導致爲每個數據庫更新更改應用程序的數據庫更新代碼)會更高效嗎?如果SQL是最好的選擇,我在哪裏可以找到一個很好的參考/教程,涵蓋我需要做的這些主題(我已經瀏覽了幾個不同的在線,有些看起來很簡單,所以我會很感激好的一個)。
此外,如果您對改進算法有任何提示,我很樂意聽取您的建議。
編輯:
我忘了提,但(score)
不是存儲在unrankedEntities的值。它需要通過對另一個表中符合特定條件的行進行計數來計算每個實體的計算量,並通過一個常量和從其他表中提取的數字進行乘法運算。此外,它需要存儲到排名實體中以避免每次需要(通常)時進行所有這些計算。
編輯:
有人向我指出的是,新增加的應用程序的部分已經包含了必要做所有的數據操作的代碼,所以我會用回收的簡單的解決方案去說代碼,雖然結果是不太整齊的update-via-sql類,因爲它現在有一個update-via-sql部分和update-via-code部分。
LINQ to SQL或ADO.NET實體框架? –
實體框架。 – yoozer8
然後數據進入何處?你怎麼做你的插入?通常情況下,一些ORM軟件會執行讀取和修改......所以您使用的是什麼? –