Browse by Tags

【茶包射手日記】只涉及單一資料表的Deadlock
在我原本狹隘的SQL知識裡,Deadlock發生情境需要兩個Process A與B跟兩個Table X與Y搭配演出: A鎖定住X想更新Y,B鎖定Y等著要更新X,產生無解的僵持,再由SQL二者擇一選為犠牲者,令其失敗來成立另一個Process。 直到最近處理一起Deadlock案例,才又長了見識。一個處理流水序號的Stored Procedure,讀取與更新對象只限同一Table,並不構成井底之蛙心中的Deadlock成立要件: 兩個鎖定對象、相反的讀取/更新順序,但Deadlock卻硬生生地發生了...
筆記-在SQL查詢中計算所佔百分比
最近遇到的小需求,要計算資料表中某一數字欄位所佔百分比,例如: ItemId GroupId CostAmt ------ ------- -------- X1000 A 50 X1001 A 250 X1002 A 200 X1003 B 200 X1004 B 300 目標是要由以上資料算出X1000佔全部成本5%,X1001佔25%... 等百分比資訊。另外則還要再進一步分組,算出各ItemId佔該組總成本的百分比,例如: X1000佔A群組成本總和的10%,X1001佔50%,X1002佔40...
【茶包射手日記】SqlDataReader讀取FOR XML結果發生字元截斷
一段使用很久的程式今天忽然出錯,追查原因,是一段古早寫的 FOR XML 查詢出了問題。 程式用SqlCommand執行"SELECT ... FROM ... FOR XML RAW('Boo’)”,最近因資料異動,結果傳回超長的字串,透過SqlDataReader讀取時,只得到最前端的2,033個字元,XML內容被不正常截斷。 微軟有一篇KB310378 The XML data row is truncated at 2,033 characters when you use...
SSMS Intellisense強化工具-dbForge SQL Complete
在查SSMS的Intellisense 為何失效 時,無意看到demo的 介紹文 ,發現好物一枚— dbForge SQL Complete ! 好東西的推薦文永遠不嫌多,故特別PO文一篇介紹給讀者朋友們周知。 dbForge的構想與SSMS 2008相同,就是在輸入T-SQL時給予提示及自動完成,但dbForge SQL Complete支援的項目更多範圍更廣,整理幾點我認為值得一提的特色: (產品分為免費的SQL Complete Express及付費版SQL Complete Standard...
【茶包射手日記】不限條件選項之SQL組裝與資料庫OR運算特性驗證
在設計查詢介面時,下拉式選單是很常見的條件選取方式,而往往我們都會再加上一個"不限條件"選項,允許使用者不限制條件,列出所有項頁。舉例來說: 在設定查詢地區的下拉選單(例如: ddlArea),除了列出基隆市、台北市、台北縣、桃園縣...等各縣市Option外,常會再多一個"所有地區"選項,將Option Value設定='*',選取時表示不限定地區。在Server端,便要將這些篩選條件轉為SQL指令,如何將'*'視為不限地區...
MEMO-Procedure Transaction: SQL Server vs Oracle
同事詢問關於Procedure內是否會自動包成Transaction的問題,我的認知是SQL要額外下SET XACT_ABORT ON,但Oracle則預設會自動包成Transaction。記憶有些模糊,所以索性做個實驗最準。 分別在SQL, Oracle寫了Procedure,先塞入兩筆資料,第三筆故意產生PK重覆錯誤,觀察資料庫是否有前兩筆資料來判別是否有Transaction保護。實驗證明,原先的認知沒錯,二者行為不同。 SQL Server Procedure要將操作包成Transaction的話...
取代DTCPing的新工具-DTCTester
今天要設定Windows 2008防火牆使用SQL分散式交易,查資料時 發現了 檢測MSDTC連線的新工具-- DTCTester 。 簡單來說,它是用以取代DTCPing的改良版。主要優點是只需在Client執行,不像DTCPing得在Client,Server都跑互連,而且由於它會真的連線SQL Server進行一些讀寫測試,相較於DTCPing只檢查網路傳輸層,更能正確反應SQL連線的真實狀態。換句話說,過去DTCPing成功但SQL分散交易不通的"偽陽性"失真情況可望改善...
小心駛得萬年船--SQL指令保險栓
手動對資料庫下指令是一件恐怖的事,稍一操作不慎,就有可能把整個系統給毁了。 理論上,吾人應該極力避免手工更動資料這等可恥行徑。只要系統考慮得夠周詳,預先料想到所有可能出現的詭異狀況,一一提供相關的介面,經過程式邏輯檢查後才對資料進行處置或修正,不可能出現需要手動改資料的狀況。這是一個好的系統應有的嚴謹度!! 好,官冕堂皇的屁話說完了,現在來聊聊怎麼做好這件"可恥的事"? (道德感強烈者或軟體工程基本教義派請略過本文) 當我們萬不得已,必須使用T-SQL指令直接對資料庫進行操作時...
SQL Server, 請幫我從1數到100
今天看到 保哥 一篇 關於LINQ to SQL分頁問題 的文章,裡面有一段範例是利用'User ' + cast(cast(rand() * 100 as int) as varchar(3))的技巧連續執行十次產生十筆測試用的資料。 這讓我想起之前在做 CSV字串分割成陣列UDF 時 意外學到 的技巧,可以借用鮮為人知的master.dbo.spt_values系統資料表,讓SQL產生一段連號數字,這樣就能一口氣塞入連號的"User 1”, "User 2...
KB-再探Windows Update後SSRS不能列印問題
【2008-10-30更新】依本文做法仍無法更新RSClientPrint.cab的朋友,請參考我的 第三帖藥方 。 自從貼出 安裝KB956391後SSRS不能列印問題 後,陸續又接獲同事及網友的回報,才慢慢釐清這個事件的始未... SSRS不能網頁列印的原因源於RSClient Print這顆元件被ActiveX KillBit封殺,而封殺的理由是基於安全考量,RSClientPrint Class存在一個 GDI+漏洞 ,讓駭客可以透過惡意的BMP發動溢位攻擊。換句話說, KB956391...
TIPS-SqlConnection的ConnectionString保密機制
在設計資料庫相關程式時,連線字串最好能以加密方式存在config檔案裡;再進一步,最好連解密字串的機制都封裝在特定的資料存取元件中,開發人員及呼叫端程式只需傳入SqlCommand或更高階的抽象化資料物件,就可以完成資料庫存取作業,不必也不能得知連線字串的相關細節。 只是依我自己的實務經驗,有時直接傳連線物件(SqlConnection)給呼叫端是較省事的做法(丟一個連線給你自己玩,別來煩我! 是有點不負責任,但元件開發者未必有時間陪著在每個案子中抱著各式不同的需求打滾),連線丟出去了,呼叫端來個SqlConnection...
KB-SQL 2000 BULK INSERT Error
今天在一台SQL 2000上做BULK INSERT,語法是 BULK INSERT PicLibrary FROM 'C:\Output\PicInfo.txt' WITH ( BATCHSIZE = 1000, FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n', TABLOCK ) 我之前在SQL 2005上做過 同樣的事 ,但這回在SQL 2000上卻一直爆出錯誤: 訊息 4866,層級 16,狀態 1...
Posted 26 February 2008 03:03 PMJeffrey | 3 comment(s) 11,435
Filed under:
BULK INSERT Performance
一直以為BULK INSERT就不會記Log,結果今天跌了一跤... 我下的語法如下(錯誤示範,小朋友不要學) TRUNCATE TABLE RESD BULK INSERT RESDE FROM 'C:\DataProc\Output\RESD.txt' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n' ) RESD.txt約1.4G,結果BULK INSERT花了30分鐘還沒做完,Log檔就長到20G...
Posted 12 January 2008 01:57 AMJeffrey | 7 comment(s) 24,262
Filed under: , ,
Two Database Tips
#別用浮點數算錢 Don't use float in currency calculation DECLARE @f1 FLOAT , @f2 FLOAT DECLARE @f3 FLOAT , @f4 FLOAT SET @f1=6481.45 SET @f2=6000 SET @f3=0.1 SET @f4=(@f1-@f2)*@f3 SELECT (6481.45-6000)*0.1 AS V1 SELECT @f4 AS V2 SELECT ROUND(@f4, 2) AS V3 SELECT...
TIPS-Calculating Percentage In SQL Query
有一個資料表,內有四筆資料,數量分別是2, 3, 5, 10,我希望用SQL查出如下包含百分比10%,15%, 25%, 50%的結果: ID AMT PERC ----- ------ ------- 1 2 10% 2 3 15% 3 5 25% 4 10 50% 同事出了這個考題給我,算是讓我學會 SUM() OVER (PARTITION BY ...)的用法。以上問題的解法如下: --FOR ORACLE SELECT ID, AMT, AMT * 100 / SUM (AMT) OVER...
更多文章 下一頁 »

搜尋

Go

<September 2017>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication