Browse by Tags

查詢 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,322
Filed under:
【茶包射手筆記】在 View 使用 SELECT * 的風險
分享同事踩到的 SELECT * 地雷一枚。 大家應該在程式設計準則都看過這條-「避免使用 SELECT * FROM Table,應以 SELECT Col1, Col2… 明確列舉欄位…」。 如此建議必有其考量:第一個理由顯而易見,正向表列必要欄位,可避免在網路傳送用不到的資料浪費頻寬,並能減少客戶端、伺服器端處理多餘資料的資源損耗。再者,查詢欄位多寡也可能影響效能,SELECT * 時為牽就非必要欄位,資料庫可能改用較無效率的索引,不利效能最佳化。還有一種極端情境,若所需欄位都存在於 Non...
Posted 15 February 2017 10:26 PMJeffrey | 1 comment(s) 8,219
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,727
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,511
Filed under: ,
對付SQL Injection,換掉單引號到底夠不夠?
雖然現在遇到使用者輸入條件查詢DB,我一律都用參數化查詢(順推超好用的 Dapper )不再偷懶組裝SQL指令,但關於SQL Injection,我心中始終藏著一個疑問:流傳千古的… WHERE Col = '" + input.Replace("'", "''") + "'"換單引號大法,人人都知它不夠安全,但網路流傳一種說法,指稱換單引號只是自欺欺人根本無效,奇怪的是卻很少看到它被打穿的實例...
Posted 20 March 2016 11:22 PMJeffrey | 6 comment(s) 9,553
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,089
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,617
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) 12,857
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) 20,448
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,159
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) 13,777
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...
SQL筆記:再談動態WHERE條件
前一篇文章 探討了「WHERE 1=1動態查詢條件組裝」的效能問題,並介紹如何利用C#語言特性簡單寫出沒有多餘WHERE 1=1的馬甲線SQL指令。而在前文提到的Code Review會議,還有一招不需要組裝WHERE指令的做法也被提及。 //REF: http://goo.gl/SBF1Wi by 91 /// <summary> /// 當資料物件為null時傳回DBNull.Value /// </summary> /// <param name="obj"><...
Posted 18 August 2015 08:53 AMJeffrey | 1 comment(s) 10,856
Filed under: ,
SQL筆記:WHERE 1=1會拖累效能嗎?
稱不上DB咖的我,反常地連寫兩篇SQL筆記,其實都是研究「動態產生SQL查詢條件」議題的副產品,這篇才算步入正題,鴨架子湯先來兩碗,烤鴨才上桌,哈!但這樣安排是對的,以下探討有一部分需要先前筆記的基礎才好聊下去。 兩週前,參加一場Code Review討論,會中大家剛好聊到「動態產生SQL查詢條件」這檔事兒。它的情境是:使用者在操作介面上有多項條件選擇,例如:日期、類別、關鍵字,每個條件使用者可選擇輸入或不輸入(不輸入代表不限定)。從程式的角度,使用者依輸入條件不同,可能形成以下幾種SQL查詢條件...
Posted 17 August 2015 07:37 AMJeffrey | with no comments 16,252
Filed under: ,
SQL筆記:Literal, Variable與Parameter
繼續研究不同SQL寫法對執行計劃的影響。 如果大家讀過 上一篇筆記 ,就會知道以下兩則查詢將使用不同的執行計劃,前者走Clustered Index Scan,後者則是Index Seek + Key Lookup。 SELECT ProductID, OrderQty FROM Sales.SalesOrderDetail WHERE ProductID = 870 --4688筆 SELECT ProductID, OrderQty FROM Sales.SalesOrderDetail WHERE...
Posted 16 August 2015 05:13 PMJeffrey | with no comments 6,121
Filed under: ,
更多文章 下一頁 »

搜尋

Go

<June 2017>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication