Browse by Tags

KB-當 WHERE AND/OR 條件遇上 NULL
在 SQL 世界裡 NULL 性質特殊,行為獨特,過去就曾討論過: KB-詭異的NOT IN查詢,原來是NULL搞鬼 ORACLE, 你把空字串怎麼了 自以為至此對 NULL 認識已足,不料前兩天在 WHERE LIKE AND/OR 情境中遇上 NULL,一時意志動搖陷入迷惘,想必是認知還不夠深刻,再補篇 KB 吧! 先別急著看答案,大家猜猜以下 SQL 指令會得到什麼結果? select 'T1' , 'MATCH' from dual where null like...
Posted 19 July 2017 11:04 PMJeffrey | with no comments 2,436
Filed under: , ,
【茶包射手筆記】SQL 錯誤-Server 'XXX' is not configured for RPC
在測試台運作正常,程式部署到正式環境後出現 SQL 錯誤: System.Data.SqlClient.SqlException (0x80131904): Server 'XXX' is not configured for RPC. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)...
Posted 12 July 2017 11:38 PMJeffrey | with no comments 1,925
Filed under: ,
Visual Studio 開啟專案出現 SQL Server Express 未安裝警告
在公司開啟某些工作專案時,我的 Visaul Studio 常會彈出像這樣的警告訊息: The Web project 'MyWeb' requires SQL Server Express LocalDB, whick is not installed on this computer. To upgrade the project database to use latest SQL Server Express LocalDB, double-click the database...
Posted 03 July 2017 07:47 AMJeffrey | with no comments 1,373
Filed under: , ,
查詢 SQL Server 詳細版本資訊
資安更新作業需確認 SQL Server 詳細版本資訊,需細到 Service Pack 及累積安全更新,爬文查到超好用的 SQL Server 版本資訊偵測腳本 。這組自動偵測腳本由微軟 OneScript Team 提供,可顯示版號、產品名稱、產品層級(Service Pack 版本)、版本別(Express、Enterprise、Developer…)、32 / 64 位元、Service Pack 版本、累積更新(Cumulative Update)等資訊。 更厲害的來了,偵測結果還包含後續若要更新...
Posted 08 March 2017 10:23 PMJeffrey | with no comments 4,496
Filed under:
【茶包射手筆記】在 View 使用 SELECT * 的風險
分享同事踩到的 SELECT * 地雷一枚。 大家應該在程式設計準則都看過這條-「避免使用 SELECT * FROM Table,應以 SELECT Col1, Col2… 明確列舉欄位…」。 如此建議必有其考量:第一個理由顯而易見,正向表列必要欄位,可避免在網路傳送用不到的資料浪費頻寬,並能減少客戶端、伺服器端處理多餘資料的資源損耗。再者,查詢欄位多寡也可能影響效能,SELECT * 時為牽就非必要欄位,資料庫可能改用較無效率的索引,不利效能最佳化。還有一種極端情境,若所需欄位都存在於 Non...
Posted 15 February 2017 10:26 PMJeffrey | 1 comment(s) 8,345
Filed under:
再談T-SQL複合字串鍵值比對-借用PARSENAME()
以下是我實際遇到的情境,複合鍵在某些資料表拆成兩個或三個欄位,但在某些資料表則用"."或"-"串接存成單一欄位。(不要問我為什麼搞出這種不一致的設計,誰沒有過去?) 如以下的例子,在JStock資料表的Market及Symbol欄位,在JReport則使用一個FullSymbol欄位,存成"Symbol.Market"。 問題來了,如果這兩個Table要JOIN怎麼辦?過去用過一種鳥方法: JReport R JOIN JStock S...
Posted 07 September 2016 10:19 PMJeffrey | 2 comment(s) 4,810
Filed under:
SQL效能調校經驗一則
使用者報案,某網頁效能變得奇慢無比,簡單的上線公告查詢耗時超過兩分鐘,追查後抓出問題查詢如下例: select case when convert ( varchar ,u.StartDate,108)= '00:00:00' and convert ( varchar ,u.EndDate,108)= '00:00:00' then convert (datetime, convert ( varchar ,u.EndDate,111))+1 else EndDate...
Posted 30 May 2016 10:23 PMJeffrey | with no comments 10,890
Filed under: ,
對付SQL Injection,換掉單引號到底夠不夠?
雖然現在遇到使用者輸入條件查詢DB,我一律都用參數化查詢(順推超好用的 Dapper )不再偷懶組裝SQL指令,但關於SQL Injection,我心中始終藏著一個疑問:流傳千古的… WHERE Col = '" + input.Replace("'", "''") + "'"換單引號大法,人人都知它不夠安全,但網路流傳一種說法,指稱換單引號只是自欺欺人根本無效,奇怪的是卻很少看到它被打穿的實例...
Posted 20 March 2016 11:22 PMJeffrey | 6 comment(s) 9,873
Filed under: ,
無法使用Windows帳號登入防火牆內的SQL Server
要穿過防火牆連上一台SQL(1433 Port有開,網路芳鄰NETBIOS封閉),發現用SQL帳號登入(SQL Authentication)可成功登入,若用AD帳號(Windows Authentication)則會出錯。 錯誤訊息為: 已超過連接逾時的設定。在嘗試使用登入前的信號交換確認時超過逾時等待的時間。這可能是登入前的信號交換發生失敗,或伺服器無法及時回應所造成。 Connection Timeout Expired. The timeout period elapsed while attempting...
Posted 17 March 2016 09:46 PMJeffrey | 2 comment(s) 4,236
Filed under:
T-SQL使用逗號分隔字串當作WHERE IN條件
寫Stored Procedure時有一個麻煩情境是由外界傳入參數當作WHERE IN條件,由於參數數量不定,難以事先寫成WHERE … IN (@val1, @val2, @val3),開發者往往會走上用傳入參數組裝SQL指令的險路,稍有不慎就搞出SQL Injection,導致難以想像的災難。(是的,SQL Injection不只會出現在ASP/ASP.NET/PHP/Java/C++,也可能藏在Stored Procedure裡) 最常見的例子是開放使用者勾選一個到多個類別作為篩選條件,例如使用者選取了...
Posted 13 March 2016 10:16 PMJeffrey | 4 comment(s) 8,959
Filed under:
將複合字串拆成多欄位-以ORACLE及SQL為例
先說說我的需求。某資料表使用複合欄位當Primary Key,例如:由OrgId、DeptId、UserId三欄組成唯一鍵值。當要查詢特定資料,理論上應寫成WHERE OrgId='…' AND DeptId = '…' AND UserId = '…'。為求簡便,在.NET程式端以及某些資料表我發明了一種複合代碼字串"OrgId-DeptId-UserId",只用一個參數或一個欄位就搞定關聯,省時又省力。不過,每個做法總有黑暗面...
Posted 09 March 2016 06:32 AMJeffrey | 5 comment(s) 13,511
Filed under: ,
GUID Primary Key資料庫避雷守則
【聲明】該不該用GUID當Primary Key是可以讓開發人員大戰三百回合的好題材,由標題可知我屬於GUID陣營,這篇文章不打算花時間論證該不該用GUID PK,假設讀者已接受使用GUID當PK,只聚焦如何避免GUID PK導致資料庫效能悲劇。 故事源起MVP James最近寫的幾篇 GUID鬼故事 (包含一起寫入資料3秒變40秒的 案例 ,也實證了GUID作為叢集索引造成 索引破碎現象 ,值得一看),讓我有所警覺,身為一個偏好GUID Primary Key的開發者,有必要正視這個問題,避免掉進資料庫效能陷阱...
Posted 29 January 2016 07:16 AMJeffrey | 19 comment(s) 21,234
Filed under:
欄位合併效能比較:CTE vs FOR XML
前一篇文章 介紹用CTE實現SQL一對多關聯欄位合併的方法,找資料期間曾發現另一個替代做法,利用SQL Server的FOR XML PATH('')技巧,可將多筆資料轉成單一字串( 參考 ),看來也相當簡潔。但當下覺得子查詢加FOR XML轉換的做法有效能疑慮,理應不如CTE(事實不然!),加上搞CTE比較有挑戰性,故選了CTE研究嚐鮮。 網友 ChoeChin 留言提到FOR XML寫法,讓我重新思考:如果要大量重度應用,效能議題不可忽視,CTE效能是否真的比FOR XML方法好...
Posted 21 January 2016 08:46 PMJeffrey | 7 comment(s) 6,548
Filed under:
CTE應用-將多筆查詢結果合併成逗號分隔字串
一對多關聯是常見的資料庫應用情境,有時我會遇到將多筆關聯資料特定欄立合併成逗號分隔字串的需求。聽起來有點抽象,用個實例說明。 假設有兩個資料表,應用系統清單及負責該系統的工程師名字,用以下指令建立模擬資料: CREATE TABLE AppSystem ( Name VARCHAR (16), CodeName VARCHAR (16) ) INSERT INTO AppSystem VALUES ( 'HR' , 'Mars' ); INSERT INTO AppSystem...
Posted 19 January 2016 06:36 AMJeffrey | 5 comment(s) 14,407
Filed under:
【茶包射手日記】SqlException Login failed for user '<Domain>\<Computer>$'.
在ASP.NET專案使用"Data Source=(local);Integrated Security=SSPI;Initial Catalog=MyDB"以Windows驗證連線本機SQL Server,Visual Studio測試正常,搬到IIS後出現以下錯誤: System.Data.SqlClient.SqlException: Login failed for user '<Domain>\<Computer>$'. Visual...
更多文章 下一頁 »

搜尋

Go

<July 2017>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication