in

Darkthread

黑暗執行緒
All Tags » .NET » SQL 2008 (RSS)

Browse by Tags

  • 使用陣列參數執行SQL WHERE IN比對

    傳入字串或數字陣列當作篩選參數是很常見的SQL查詢情境,例如: 使用者在UI勾選取10項類別代碼,希望從Products資料表找出這10類的所有產品,轉換成SQL語法,相當於SELECT * FROM Products WHERE CategoryId IN (1,3,8,...,215)。 遇到這類需求,好傻好天真的開發者不小心會寫成恐怖的 SQL Injection自殺式查詢 : string sql = "SELECT * FROM Products WHERE CategoryId IN (" +                   ...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 05-08-2014
  • 【茶包射手日記】只涉及單一資料表的Deadlock

    在我原本狹隘的SQL知識裡,Deadlock發生情境需要兩個Process A與B跟兩個Table X與Y搭配演出: A鎖定住X想更新Y,B鎖定Y等著要更新X,產生無解的僵持,再由SQL二者擇一選為犠牲者,令其失敗來成立另一個Process。 直到最近處理一起Deadlock案例,才又長了見識。一個處理流水序號的Stored Procedure,讀取與更新對象只限同一Table,並不構成井底之蛙心中的Deadlock成立要件: 兩個鎖定對象、相反的讀取/更新順序,但Deadlock卻硬生生地發生了! 試著用以下方式模擬重現問題。以下的SQL指令,會在一個Transaction中先讀取LockLab的特定計數欄位...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 12-20-2012
  • 【茶包射手日記】SqlDataReader讀取FOR XML結果發生字元截斷

    一段使用很久的程式今天忽然出錯,追查原因,是一段古早寫的 FOR XML 查詢出了問題。 程式用SqlCommand執行"SELECT ... FROM ... FOR XML RAW('Boo’)”,最近因資料異動,結果傳回超長的字串,透過SqlDataReader讀取時,只得到最前端的2,033個字元,XML內容被不正常截斷。 微軟有一篇KB310378 The XML data row is truncated at 2,033 characters when you use the SqlDataReader object 描述了這個問題,並建議 改用ExecuteXmlReader...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 06-10-2011
  • SQL 2008 TVP資料匯入之火力展示

    切入主題前,先感謝網友小言在 留言 中分享了SQL 2008 TVP(Table Value Parameter,資料表值參數),一個我差點錯過的好物。 過去遇到要從程式端塞大量資料到資料庫的場合,我慣用的 伎倆 手法不外乎產生INSERT Script與BULK INSERT這兩招,坦白說都挺麻煩的,逃不掉將記憶體中DataTable物件轉換為Script或CSV Text的過程,而既然有 Object -> Text的需求,就免不了得針對不同型別寫邏輯。如果能直接把DataTable轉成資料庫端的Table,免除中間額外轉換,肯定能省下可觀的Coding及執行時間。 SQL Server...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 05-25-2011
  • SQL與ORACLE處理IsolationLevel.Serializable的行為差異

    接觸ORACLE之前,玩過好一陣子的SQL,對Serializable 隔離等級 的認知是: 在隔離範圍內,所有讀取資料的動作都會產生鎖定,將資料保護起來避免外界更動 雖然Serializable隔離等級的代價高昂,對效能殺傷力極大應盡量避免,但因其執行邏輯簡單不易出錯,還是會有其適用時機。 以下是在SQL上實現Serializable隔離的示範: 使用Visual Studio逐行偵錯功能,在兩次讀取間設定中斷點,中斷時用SSMS試圖更動同一筆資料,就可發現UPDATE指令會擋住,要等到.NET程式完成或放棄Transaction後才會繼續執行,驗證鎖定的存在。 private void TestSqlLock...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 01-27-2011
  • 【茶包射手日記】不限條件選項之SQL組裝與資料庫OR運算特性驗證

    在設計查詢介面時,下拉式選單是很常見的條件選取方式,而往往我們都會再加上一個"不限條件"選項,允許使用者不限制條件,列出所有項頁。舉例來說: 在設定查詢地區的下拉選單(例如: ddlArea),除了列出基隆市、台北市、台北縣、桃園縣...等各縣市Option外,常會再多一個"所有地區"選項,將Option Value設定='*',選取時表示不限定地區。在Server端,便要將這些篩選條件轉為SQL指令,如何將'*'視為不限地區? 我過去都用條件式動態組裝: if (ddlArea.Text != "*"...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 03-01-2010
  • 觀察LINQ to SQL DataContext的連線開啟時機

    昨天的文章 發表後,有兩位網友提到了DataContext是否要加using的議題。 我接觸LINQ to SQL是由Scott Gu的 這幾篇文章 開始入門的,在他的範例中沒有特別提到using,我也自始就忽略DataContext有實做IDispose這件事。雖然用using包住絕對有益無害(只要小心using中間過程如將DataContext傳到外部,要留意using結束後外部就不可再繼續叫用),但我倒認為DataContext裡的Connection應該不是一new DataContext就建立一條連線不放,直到Dispose()才結束釋出,而是Query時開啟連線,用完即關閉;Update時再重新開啟連線...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 10-18-2009
  • Connection Pooling之SqlDataReader.Close()測試

    早上貼了 OracleConnection Pooling觀察文 後,引發另一個疑問: 那麼沒呼叫SqlDataReader.Close()也會有相同問題嗎? 程式經過修改,就做出了SQL版: public static void ShowSessionCount( string tag) { using (SqlConnection cn = new SqlConnection(cnStrMonitor)) { cn.Open(); SqlCommand cmd = new SqlCommand( @" select count(*) as c from sys.sysprocesses...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-11-2009
第1頁,共1頁 (8個項目)
Powered by Community Server (Non-Commercial Edition), by Telligent Systems