Browse by Tags

小心駛得萬年船--SQL指令保險栓
手動對資料庫下指令是一件恐怖的事,稍一操作不慎,就有可能把整個系統給毁了。 理論上,吾人應該極力避免手工更動資料這等可恥行徑。只要系統考慮得夠周詳,預先料想到所有可能出現的詭異狀況,一一提供相關的介面,經過程式邏輯檢查後才對資料進行處置或修正,不可能出現需要手動改資料的狀況。這是一個好的系統應有的嚴謹度!! 好,官冕堂皇的屁話說完了,現在來聊聊怎麼做好這件"可恥的事"? (道德感強烈者或軟體工程基本教義派請略過本文) 當我們萬不得已,必須使用T-SQL指令直接對資料庫進行操作時...
TIPS-Alter Assembly's Owner
Attach或Retore SQL資料庫到別台,必須要先Drop User才能重設User權限,這個我很早就有 經驗 。 這次的問題有點不一樣,在Drop User時出現以下訊息: The database principal owns an assembly and cannot be dropped 用SQL Server Management Studio檢查,果然有一個SQLCLR Stored Procedure的Owner不是dbo,而是這個我要Drop的User。我想起來,之前在Deploy...
Posted 23 October 2008 07:54 AMJeffrey | with no comments 4,872
Filed under: ,
兩個Oracle Linked Server與SQL間資料移轉問題
我在一台SQL上設了Linked Server指向ORACLE,利用 INSERT INTO SqlTable SELECT * FROM LinkedOracleServer..MySchema.MyTable 的方法從ORACLE端匯資料過來,一路相安無事。 直到今天同事改了ORACLE上的Schema,將USERNAME由VARCHAR2改為NVARCHAR2,結果在倒資料時冒出以下錯誤: Msg 7356, Level 16, State 1, Line 5 The OLE DB provider...
Posted 03 September 2008 08:22 AMJeffrey | 6 comment(s) 17,550
Filed under: , ,
TIPS-SqlConnection的ConnectionString保密機制
在設計資料庫相關程式時,連線字串最好能以加密方式存在config檔案裡;再進一步,最好連解密字串的機制都封裝在特定的資料存取元件中,開發人員及呼叫端程式只需傳入SqlCommand或更高階的抽象化資料物件,就可以完成資料庫存取作業,不必也不能得知連線字串的相關細節。 只是依我自己的實務經驗,有時直接傳連線物件(SqlConnection)給呼叫端是較省事的做法(丟一個連線給你自己玩,別來煩我! 是有點不負責任,但元件開發者未必有時間陪著在每個案子中抱著各式不同的需求打滾),連線丟出去了,呼叫端來個SqlConnection...
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) 22,961
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-Using PIVOT In SQL 2005
遇到一個可以應用SQL 2005 PIVOT新功能的好例子,拿出來分享一下。 分析IIS Log時,我希望統計每一秒鐘不同執行結果(Status Code=200, 304, 401, 404, 500 ...)的次數,由IISLog匯入而成的Table可以找到LogTime與StatusCode兩個欄位。 要統計每秒不同StatusCode的數量不難,例如以下的T-SQL: SELECT LogTime, StatusCode, Count (*) As Cnt FROM IISLogTable...
Posted 20 July 2007 07:29 AMJeffrey | 22 comment(s) 38,785
Filed under: ,
SQLCLR-SqlString Max Size 8000 Limitation
我寫了一個SQLCLR的UDF(User Defined Function),對傳入的字串做了些處理再傳回: 1: [Microsoft.SqlServer.Server.SqlFunction] 2: public static SqlString DoSomething(SqlString inpString) 3: { 4: if (compString.IsNull) 5: return SqlString.Null; 6: else 7: return new SqlString( 8...
Posted 12 June 2007 08:11 AMJeffrey | 2 comment(s) 8,955
Filed under: ,
KB-SQL 2000->2005, Table Owner Issue
資料庫要從SQL 2000搬到SQL 2005,我最慣用的手法是: 1) 將SQL 2000的DB Detach 2) MDF, LDF檔案Copy到SQL 2005主機 3) 在SQL 2005上Attach 4) 移除新Attach上去DB中的原User資料(不然建立User Mapping時會因為User已存在而失敗) 5) 建立新User並設好User Mapping就大功告成! 今天遇到一個比較棘手的狀況: SQL 2000資料庫中的Table Owner並不是dbo,而是特定的User...
Posted 30 May 2007 01:38 PMJeffrey | with no comments 7,352
Filed under: ,
SQL 2005 T-SQL Enhancement: Common Table Expression
從SQL 2000時代,相信不少人就知道運用Derived Table的技巧,將一段特定條件的查詢結果當作一個資料表來處理,讓整個查詢語句變得簡潔,且不必付出操弄暫存資料表的額外成本。不過,Derived Table與暫存資料表間還是有些差別,暫存資料表在建立後,可以反覆查詢,而Derived Table卻不行。CTE的出現打破了這項限制,兼具了Derived Table簡便輕巧的特性,也具備了如暫存資料表般可重覆使用的優點。 不過,改善了Derived Table無法重覆使用的缺點並不是CTE最受人矚目的突破...
Posted 23 May 2007 12:04 AMJeffrey | 4 comment(s) 21,175
Filed under: ,

搜尋

Go

<May 2017>
SunMonTueWedThuFriSat
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication