[小菜一碟] 利用 SQL Server 的 CTE(Common Table Expression)遞迴取得族譜中某人的所有子孫

樹狀的資料結構在日常的程式設計當中挺常見的,舉凡像是留言板人事組織族譜、…等,都用得上,但當我們把樹狀結構的資料存進 SQL Server 之後想要撈出來,除了用跑迴圈之外大概就是用遞迴了,迴圈的寫法就不多介紹,本篇文章要來跟大家分享遞迴的寫法。

...繼續閱讀 »

[小菜一碟] 適用 SQL Server 的三種單筆資料 INSERT or UPDATE(Upsert)的寫法

INSERT or UPDATE 或者有人稱 Upsert,是一個撰寫資料庫存取應用程式一定會遇到的場景,這個看起來簡單不過的寫入資料邏輯,到了實際真正要施作的時候,是有一些細節需要去注意的,下面我就我所知道的三種 INSERT or UPDATE 的寫法跟各位朋友分享。

...繼續閱讀 »

[小菜一碟] 在 SQL Server 做密碼的雜湊跟比對

我們都知道不應該將密碼以明碼的方式存進資料庫,至少密碼要雜湊(Hash)過才放進資料庫,大多數的人應該都是選擇在應用程式裡面,先將密碼雜湊過,再將密碼存進資料庫內,不過 SQL Server 已經有一套機制來處理密碼雜湊這件事,我們可以放心地交給 SQL Server 自己來處理。

...繼續閱讀 »

[廚餘回收] 解決因參數嗅探(Parameter Sniffing)導致使用到錯誤執行計劃的方法之一 - 加入註解。

遇到參數嗅探(Parameter Sniffing)出問題的時候真的會讓人無力,我們為了避免 SQL Injection,所以參數化查詢變成了通則,而正是因為參數化查詢才會有參數嗅探,如果我們是使用 Adhoc 或 Prepared 的方式在下 SQL 語句的話,倒是有一個方法能夠避免因參數嗅探使用到錯誤執行計劃的問題,那就是加入註解

...繼續閱讀 »

[小菜一碟] 已知有一個固定值的集合,在 SQL Server 怎麼把它變成 Table?

這個標題聽起來像是廢話,我們有一個集合,怎麼把它變成 Table? 啊不就 INSERT INTO 就好了?我要介紹的不是只有 INSERT INTO 而已,我們在寫 SQL 的時候,偶爾會遇到一種場景,我們手上有一個集合,這個集合的值是固定的,比如說年份 2011 ~ 2020、月份 1 ~ 12、...等,這個集合我們會拿去跟現有的資料做 JOIN,進行一些統計運算,我們把這個集合變成 Table,在操作上就會比較方便一點,我就我所知的四種方法來跟大家分享。

...繼續閱讀 »

[小菜一碟] 利用 window.navigator.sendBeacon() 在使用者關閉網頁視窗時發送記錄

我們在追蹤客戶端行為時,多多少少會遇到一個場景,就是要在使用者把網頁視窗關閉時,將記錄送回伺服器端,做法上我們可能會想在網頁視窗觸發 unload 事件的時候,發送 AJAX Request 回伺服器端就好了,但是這個方法在一些瀏覽器上(比如:Firefox)不 Work,取而代之 Web APIs 提供了更好的 API - sendBeacon()

...繼續閱讀 »

[小菜一碟] 使用 Cloudflare 的 Transform Rules 功能協助我們輕鬆判定友好爬蟲(Bot、Crawler)

在跟爬蟲的戰爭之中,很容易打到一些友好的爬蟲,像是 Google、Bing、...等搜尋引擎,還有像是 Ahrefs 這種 SEO 的輔助工具,我們要在自己的應用程式當中去過濾出所有的友好爬蟲,是一件苦差事,不過如果我們有使用 Cloudflare 的話,Cloudflare 有自己維護友好爬蟲的清單,再搭配他們自家的 Transform Rules 服務,我們就可以很輕鬆地過濾出友好的爬蟲。

...繼續閱讀 »