SQL - Store Procedure
OFFSET 與 FETCH:分頁查詢(Paging)1234567891011-- 第 1 頁:顯示第 1~10 筆SELECT * FROM EmployeesORDER BY EmployeeIDOFFSET 0 ROWSFETCH NEXT 10 ROWS ONLY;-- 第 2 頁:顯示第 11~20 筆SELECT * FROM EmployeesORDER BY EmployeeIDOFFSET 10 ROWSFETCH NEXT 10 ROWS ONLY;
👉 可以想成像 Netflix:「往右滑 10 部影片,再顯示接下來的 10 部。」
在交易中進行分頁 (Paging with Transaction)12345678910111213141516171819SET TRANSACTION ISOLATION LEVEL SNAPSHOT;BEGIN TRANSACTION;DECLARE @StartingRowNumber INT = 1, @RowCountPerPage INT = 3;WHILE (SELECT COUNT(*) F ...
SQL - Store Procedure
盒鬚圖(Box Plot,又稱箱型圖)
在夜裡奔跑的資料,不需要回頭 JOIN
夜に駆ける先別急著 GROUP BYWindow Rank《夜に駆ける》- 不是回頭統計「哪一天最痛」,而是在情緒奔跑的過程中,痛苦自然浮到最前面
MAX + JOIN 的人生像在事後寫失戀報告,假設你用 MAX + GROUP BY + JOIN 來寫這首歌,列出所有相處的日子、快樂指數、痛苦指數、聊天次數,GROUP BY「每一天」並算出「痛苦指數 MAX 的那一天」再回頭 JOIN 那一天的對話、場景、畫面最後下結論「原來是那一天最痛。」
痛苦 = MAX
回憶 = JOIN
情緒 = 被拆成資料再拼回來
這會寫成一篇 Excel 報告,不會是一首歌
而 Window Function 實際在做的是,情緒一路推進,畫面一路疊加,痛苦不斷「排序往前」
「我在跑的時候,就知道逃不掉。」
1234ROW_NUMBER() OVER ( PARTITION BY 這段關係 ORDER BY 情緒崩壞程度 DESC)
MAX => GROUPBY12345678SELECT o.*FROM Orders oJOIN ( SEL ...
TempTable
#temp(Local Temporary Table)##temp(Global Temporary Table)TVP (Table-Valued Parameters)#temp 的本質,是把「一次查不完、邏輯又複雜的中間結果」變成一個可以被優化、重用、逐步加工的暫存資料集,讓 SQL Optimizer 有機會幫你把事情做對
建立與隔離:在 tempdb 中開闢一塊專屬空間,僅限當前連線(Session)存取,確保資料不會跟別人的請求打架
資料灌入:利用 SELECT INTO 或 INSERT INTO 將中間運算結果存入
優化加速:視需求針對 #temp 建立索引(Index),這在處理萬筆以上資料時非常關
多次加工:在同一個連線內,後續的 Stored Procedure 或 SQL 指令可以反覆讀取、更新這份暫存資料。
生命週期終結:當連線關閉時自動銷毀,保持資料庫環境整潔
1234CREATE TABLE #TEMP( NAME CHAR(20), ID CHAR(10))
電商雙 11 促銷結帳想像我們要幫上萬名會員計算購物車折扣
第一步:先撈 ...
Security - QueryString
https://blog.darkthread.net/blog/owasp-top-10-n-cwe-top-25/
XSS
https://www.explainthis.io/zh-hant/swe/what-is-xss
https://medium.com/starbugs/%E8%BA%AB%E7%82%BA-web-%E5%B7%A5%E7%A8%8B%E5%B8%AB-%E4%BD%A0%E4%B8%80%E5%AE%9A%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84%E5%B9%BE%E5%80%8B-web-%E8%B3%87%E8%A8%8A%E5%AE%89%E5%85%A8%E8%AD%B0%E9%A1%8C-29b8a4af6e13
https://blog.miniasp.com/post/2012/04/17/Build-Website-Comply-with-the-Personal-Information-Law-regulations
https://docs.google.com/presentation/d/1-q_HwJ4lr_tuic2v4sa5gyhO469l4_fpv2N2NhehHjc/edit?slide=id.g104563e2 ...
ValidateAntiForgeryToken
名稱
是什麼?
用來防什麼?
ValidateAntiForgeryToken
ASP.NET MVC 內建的 CSRF 防護機制
防止他站用惡意表單偽造 POST
自訂資料安全 Token(如 SecureToken)
自己產生一組防竄改的驗證碼
防止表單中的敏感參數(如 ID)被修改
ISecureTokenEntity
自定義的介面,代表此 Entity 具有安全驗證需求
提供加密驗證方法來驗證資料
🧱 假設場景你有一個表單要刪除一筆資料:
12345<form method="post" action="/product/delete"> @Html.HiddenFor(m => m.ProductId) @Html.Hidden("SecureToken", Model.SecureToken) <button type="submit">刪除</button></form>
🔐 第一步:產生 ...
QueryString
資安小常識 - 為什麼不建議在網址用 QueryString (?a=...) 傳資料?
UberEats凡走過必留下痕跡反射型 XSS(Reflected XSS)localStorage 偷東西Cookie消毒或編碼RazorTokensummary下班時間將至,lazy 在 UberEats 下完訂單後,在「備註欄」寫上
「不要香菜」「門口放就好」「到樓下打電話」
他突然想到,食物到家的時間很可能來不及接應,於是又打上
「我現在不在家,密碼是 5740,管理室說可以直接進,如果我沒接電話就直接放我房門口就好」
後來發現外送平台有紀錄、客服看得到、內部系統會存、有時截圖還會被轉來轉去…
Query String 的本質不是「傳資料」,而是把「你要哪個資源、用什麼條件」這件事講清楚,讓這個請求可以被辨識、被重播、被理解,他正是為了讓「請求能被識別與重現」
當伺服器接到一個網址時,必須能知道「使用者要查什麼、做什麼、要哪一份資料」它是對伺服器的指令,不是傳輸內容的容器
在 HTTP 的哲學裡,它屬於 資源定位的一部分(part of URI)
URL(包含 Query S ...
商店後台的身分驗證
傳來的東西都不可信傳來的東西都不可信OpenID Connect(OIDC)商家後台程式碼模擬summary有的人會說
「我是為你好」「你可以相信我」「我一直都是站在你這邊的」
然而,真正重要的是,過去的行為一直在替你背書
就像系統不相信前端傳來的 Supplier ID,人生也不該只相信別人替自己貼的標籤
「我是朋友」→ 那你在我低潮時有沒有出現?
「我是專業的」→ 有沒有實績、作品、他人驗證?
「我是家人」→ 那你有沒有尊重我的界線?
身分,是被驗證出來的,不是宣稱出來的
系統真正可信的登入身份只能來自後端的驗證結果,而不是前端傳來的任何值
使用者登入後,系統已在後端掌握其真實身份,後端(如 Session、Token、Context)必須知道「現在是誰在操作」
例如,Service 層透過 UserService 取得當前登入身份,在業務邏輯層,不直接相信 Controller 或前端傳入的 Supplier ID,而是呼叫 NineYi.Sms.BL.Services.Users.UserService 來取得登入者資訊,因此我們也需要避免前端傳入不必要的身份欄位(如 Su ...




