Category: sql

將資料表內容轉成一連串 INSERT 語法,是蠻好用的跨伺服器搬資料表招式,之前我最愛用的工具是 SQL Dumper,但昨天聽到不幸消息:官方網站人去樓空,連註冊的 DNS 網域都已棄守。 重新尋找替代方案,找到三種做法: SSMS 內建 Generate Script 功能 ...

在 SQL 世界裡 NULL 性質特殊,行為獨特,過去就曾討論過: KB-詭異的NOT IN查詢,原來是NULL搞鬼 ORACLE, 你把空字串怎麼了 自以為至此對 NULL 認識已足,不料前兩天在 WHERE LIKE AND/OR 情境中遇上 NULL,一時意志動搖陷入...

資安更新作業需確認 SQL Server 詳細版本資訊,需細到 Service Pack 及累積安全更新,爬文查到超好用的 SQL Server 版本資訊偵測腳本。這組自動偵測腳本由微軟OneScript Team提供,可顯示版號、產品名稱、產品層級(Service Pack 版本)、版本別(Ex...

分享同事踩到的 SELECT * 地雷一枚。 大家應該在程式設計準則都看過這條-「避免使用 SELECT * FROM Table,應以 SELECT Col1, Col2… 明確列舉欄位…」。 如此建議必有其考量:第一個理由顯而易見,正向表列必要欄位,可避免在網路傳送用不到的資料浪費頻寬,...

以下是我實際遇到的情境,複合鍵在某些資料表拆成兩個或三個欄位,但在某些資料表則用"."或"-"串接存成單一欄位。(不要問我為什麼搞出這種不一致的設計,誰沒有過去?) 如以下的例子,在JStock資料表的Market及Symbol欄位,在JReport則使...

使用者報案,某網頁效能變得奇慢無比,簡單的上線公告查詢耗時超過兩分鐘,追查後抓出問題查詢如下例: select case when convert(varchar,u.StartDate,108)='00:00:00' and convert(varchar,u.EndDate,108)...

雖然現在遇到使用者輸入條件查詢DB,我一律都用參數化查詢(順推超好用的Dapper)不再偷懶組裝SQL指令,但關於SQL Injection,我心中始終藏著一個疑問:流傳千古的… WHERE Col = '" + input.Replace("'", "'...

要穿過防火牆連上一台SQL(1433 Port有開,網路芳鄰NETBIOS封閉),發現用SQL帳號登入(SQL Authentication)可成功登入,若用AD帳號(Windows Authentication)則會出錯。 錯誤訊息為: 已超過連接逾時的設定。在嘗試使用登入前的信...

寫Stored Procedure時有一個麻煩情境是由外界傳入參數當作WHERE IN條件,由於參數數量不定,難以事先寫成WHERE … IN (@val1, @val2, @val3),開發者往往會走上用傳入參數組裝SQL指令的險路,稍有不慎就搞出SQL Injection,導致難以想像的災難...

先說說我的需求。某資料表使用複合欄位當Primary Key,例如:由OrgId、DeptId、UserId三欄組成唯一鍵值。當要查詢特定資料,理論上應寫成WHERE OrgId='…' AND DeptId = '…' AND UserId = '…'。為求簡便,在.NET程式端以及某些資料表...

【聲明】該不該用GUID當Primary Key是可以讓開發人員大戰三百回合的好題材,由標題可知我屬於GUID陣營,這篇文章不打算花時間論證該不該用GUID PK,假設讀者已接受使用GUID當PK,只聚焦如何避免GUID PK導致資料庫效能悲劇。 故事源起MVP James最近寫的幾篇GUID...

前一篇文章介紹用CTE實現SQL一對多關聯欄位合併的方法,找資料期間曾發現另一個替代做法,利用SQL Server的FOR XML PATH('')技巧,可將多筆資料轉成單一字串(參考),看來也相當簡潔。但當下覺得子查詢加FOR XML轉換的做法有效能疑慮,理應不如CTE(事實不然!),加上搞C...

一對多關聯是常見的資料庫應用情境,有時我會遇到將多筆關聯資料特定欄立合併成逗號分隔字串的需求。聽起來有點抽象,用個實例說明。 假設有兩個資料表,應用系統清單及負責該系統的工程師名字,用以下指令建立模擬資料: CREATE TABLE AppSystem ( Name VARCHAR...