[小菜一碟] SQL Server 利用 LAG 及 LEAD 函數取得上一筆及下一筆資料列,來與當前資料列進行運算。

上一篇文章提到依日期彙總結果,這時候老闆又開需求了「Johnny 啊,能不能幫我多加一個欄位,讓我看到每個分店當月銷售額與上個月銷售額相比的成長百分比?」,這個需求也很常出現在我的程式設計生涯當中,我們來看看在 SQL Server 中怎麼來實現。

...繼續閱讀 »

[小菜一碟] SQL Server 帶入任意的起迄日期,產生起迄日期之間的每個日期。

假定老闆提了一個需求,他想要看每個分店每天的銷售額,如果當天沒有銷售額的分店則銷售額顯示為 0,這個需求我們從訂單資料庫裡面彙總出來就可以呈現了,但是它有一個點在於萬一某個分店在某天沒有訂單,那麼該分店在訂單資料庫是沒有資料的,則該分店的該天銷售額必須標為 0,類似這樣的需求經常在我的程式設計生涯中出現。

...繼續閱讀 »

[料理佳餚] C# 實作二階段提交(Two-phase Commit),即使 SQL Server 沒有啟用 MSDTC 也能做分散式交易。

  • 691
  • 0
  • C#
  • 2019-02-24

無論是業務需求或是 IT 需求的關係,依據不同需要將資料庫分放在不同伺服器的情形很多見,要進行跨資料庫伺服器交易我們可以啟用 MSDTC 服務來達成,我就在想能不能不去動伺服器的設定,在應用程式端來實現分散式交易?

...繼續閱讀 »

[創意料理] 用 SQL Server 的 Trigger 搭配 DMV 來抓增刪改資料表的兇手

系統中的程序(Applicaion、SQL Agent Job、Stored Procedure、...)一多,尤其大部分中小企業的資料庫增刪改並沒有得到良好的管理,重複的操作一直在做,資料若是正確的那大家相安無事,如果資料發生錯誤的時候,開發人員就雞飛狗跳了,眾多程序重複增刪改相同的資料,讓追查錯誤來源變成一件苦差事,萬一錯誤的資料又跟錢有關,那更是壓力山大,還好科技始終來自於人性,利用 SQL Server 的 Trigger 加上 DMV(Dynamic Management Views)可以幫助我們找到線索。

...繼續閱讀 »

[食譜好菜] 用 SQL Server 的 PIVOT 和 UNPIVOT 將列轉置為欄、欄轉置為列。

SQL Server 的 PIVOTUNPIVOT 運算子用來將資料表中的欄轉置為列、列轉置為欄,將資料表中指定的欄位做旋轉,因為經常用到的時候就要再 Google 一次,所幸就自己寫一篇記錄一下,而且在轉置的過程中還順便彙總,一個常看到的範例就是計算銷售人員 1 ~ 12 月的銷售金額,並將 1 ~ 12 月當做欄位名稱 SELECT 出來,除此之外還可以拿來對付一些特別的設計。

...繼續閱讀 »