作法是:
1. 使用bcp公用程式將符合條件的資料匯出
2. create temp table
3. 將兩個table名稱互換
4. 觀察一段時間,運行正常後再考慮刪除原始table(已改名過的那個)
雖然truncate很快但無法設定條件,不適用於此案例。而delete勢必造成運行速度下滑或table lock
用bcp來處理的話不必快速而且可以保留住原始table
bcp queryout語法如下:
DECLARE @cmd varchar( 2000 )
SELECT @cmd = 'bcp "Select * from testDB.dbo.testTable Where LastTxDate > dateadd(day,-365,getdate()) " queryout "c:\testTable_queryout.txt" -c -T -r "\n"'
EXEC master..xp_cmdshell @cmd
bcp in語法如下:
DECLARE @cmd varchar( 2000 )
SELECT @cmd = 'bcp testDB.dbo.testTable_backup in "c:\testTable_queryout.txt" -c -T -r "\n"'
EXEC master..xp_cmdshell @cmd
因軟硬體環境不同,以下測試資料僅供參考:
測試DB的testTable 共29517筆,bcp out的檔案大小: 21.1
MB
以bcp out匯出全部共29517的時間為4.59秒,每秒處理6425.12 rows
以bcp queryout匯出符合條件之4327筆的時間為0.38秒,每秒處理11538.67 rows
以bcp out匯入全部共29517的時間為5.25秒,每秒處理5622.29 rows
以bcp queryout匯入符合條件之4327筆的時間為0.24秒,每秒處理18412.77 rows
參考資料:
使用 bcp 公用程式匯入及匯出大量資料 (SQL Server)
bcp 公用程式 詳細參數說明
SQLServer數據導入導出工具BCP詳解
bcp 匯出與匯入
2012年12月5日 星期三
2012年12月4日 星期二
[SQL Server] 以T-SQL新增欄位至table 只能排在最後一欄
一般要在SQL Server的table下新增一個欄位有2種作法:
1. 在物件總管的table名稱上按右鍵->設計(G),然後新增。想要將新欄位插在哪個位置都可以
但缺點是,當table中資料量很大時此作法可能會導致失敗
引申資訊: 解決 Management Studio 管理工具無法變更表格結構的問題
2. 使用T-SQL來新增
缺點是新增的欄位一定會排在table的最後一欄,目前還沒有解決方法。
目前最新的SQL Server 2012好像也沒有?
土法煉鋼的解法:
如果真的非要將新欄位插入至指定欄位
新建一個排好順序的table,將資料load進去再把db名稱換過來
有錯請指正,謝謝!
2012年12月3日 星期一
[SQL Server] 修改trigger時遇到的錯誤
使用 UNION、INTERSECT 或 EXCEPT 運算子結合的所有查詢,其目標清單中的運算式數量必須相等。
不過此錯誤並不限於trigger,只要是用到UNION、INTERSECT 或 EXCEPT的話,所連接的2個table欄位數目必須一樣
2010年6月23日 星期三
2010年5月25日 星期二
在Eclipse中使用Jena API的教學
還有lib、doc跟src的設定
還有lib、doc跟src的設定
該死的java.lang.NoClassDefFoundError:出現時的解法 ps:這是在用Java servlet的情況下上面的Libraries照第一個網站這樣作 下面的lib除了第二個網站那樣,還要把JENA/lib下的所有.jar複製到workspace中的WEB-INF的lib資料夾裡面 不然就... 不要問 沒有很恐怖
2010年5月8日 星期六
package 與 import
轉錄自Java World
有些人寫了一陣子 Java,可是對於 Java 的 package 跟 import 還是不
太了解,很多人以為原始碼 .java 檔案中的 import 會讓編譯器把所 import
的程式通通寫到編譯好的 .class 檔案中,或是認為 import 跟 C/C++ 的
#include 相似,實際上,這是錯誤的觀念。
讓我們先了解一下,Java 的 package 到底有何用處。
其實,package 名稱就像是我們的姓,而 class 名稱就像是我們的名字
。package 名稱有很多 . 的,就好像是複姓。比如說 java.lang.String,就
是複姓 java.lang,名字為 String 的類別;java.io.InputStream 則是複姓
java.io,名字為 InputStream 的類別。
Java 會使用 package 這種機制的原因也非常明顯,就像我們取姓名一樣
,光是一間學校的同一屆同學中,就有可能會出現不少同名的同學,如果不取
姓的話,那學校在 處理學生資料,或是同學彼此之間的稱呼,就會發生很大的
困擾。相同的,全世界的 Java 類別數量,恐怕比台灣人口還多,而且還不斷
的 在成長當中,如果類別不使用套件名稱,那在用到相同名稱的不同類別時,
就會產生極大的困擾。幸運的是,Java 的套件名稱我們可以自己取,不像人
的姓沒有太大的選擇 ( 所以有很多同名同姓的 ),如果依照 Sun 的規範來取
套件名稱,那理論上 不同人所取的套件名稱不會相同 ( 請參閱 "命名慣例"
的相關文章 ),也就不會發生名稱衝突的情況。
可是問題來了,因為很多套件的名稱非常的長,在寫程式時,會多打好多
字,花費不少時間,比如說:
1 java.io.InputStream is = java.lang.System.in;
2 java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
3 java.io.BufferedReader br = new java.io.BufferedReader(isr);
實在是不美觀又麻煩。於是,Sun 想了一個辦法,就是 import。
這個 import 就是在程式一開頭的時候,先說明程式中會用到那些類別的
簡稱,也就是只稱呼名字,不 稱呼他的姓。首先,在檔案開頭寫:
1 import java.lang.System;
2 import java.io.InputStream;
3 import java.io.InputStreamReader;
4 import java.io.BufferedReader;
這幾行說明了這四個姓名的類別,在程式中只用他的名字來稱呼,所以當 程式
中提到 System 就是指 java.lang.System,而 InputStream 就是指
java.io.InputStream, 依此類推。於是原來的程式就變成:
1 InputStream = System.in;
2 InputStreamReader isr = new InputStreamReader(is);
3 BufferedReader br = new BufferedReader(isr);
這樣看起來是不是清爽多了呢?如果這些類別用的次數很多,那就更能體 會到
import 的好處了。可是這樣還是不夠,因為懶是人的天性,還是會有人覺得
打太多 import 了也很浪費時間,於是 Sun 又提供了一個方法:
1 import java.lang.*;
2 import java.io.*;
意思就是,等一下程式中提到的沒有姓名的類別,不是姓 java.lang,就是姓
java.io,如果這兩個裡面有同樣名字的類別,而不幸的你又只用名字稱呼這
個類別,那編譯器仍然會跟你抱 怨,因為它還是不知道你說的這個類別指那一
個姓的類別。那可不可以再懶一點呢,只寫:
1 import java.*;
歷史告訴我們,人可以懶,但不能太懶,這樣是不行的。因為那些類別是 姓
java.io 而不是姓 java。就像姓『諸葛』的人應該不會喜歡你稱他為『諸』
先生吧。
為甚麼我一開始說 import 跟 #include 不同呢?因為 import 的功能
到此為止,它不像 #include 一樣,會將檔案內容載入進來。import 只是請
編譯器幫你打字,讓編譯器把沒有姓的類別加上姓,並不會把別的檔案的程
式碼寫進來。如 果你想練習打字,可以不要使用 import,只要在用到類別的
時候,用它的全部姓名來稱呼它就行了(就像例子一開始那樣),跟使用
import 完全沒有甚麼兩樣。
另外,雖然人不可以太懶,但是 Sun 還是幫我們多偷了一點懶。因為
java.lang 這個套件實在是太常太常太常用到了,幾乎沒有程式不用它的,
所以不管你有沒有寫 import java.lang;,編譯器都會自動幫你補上,也就
是說編譯器只要看到沒有姓的類別,它就會自動去 java.lang 裡面找找看,
看 這個類別是不是屬於這個套件的。所以我們就不用特別去
import java.lang 了。
有些人寫了一陣子 Java,可是對於 Java 的 package 跟 import 還是不
太了解,很多人以為原始碼 .java 檔案中的 import 會讓編譯器把所 import
的程式通通寫到編譯好的 .class 檔案中,或是認為 import 跟 C/C++ 的
#include 相似,實際上,這是錯誤的觀念。
讓我們先了解一下,Java 的 package 到底有何用處。
其實,package 名稱就像是我們的姓,而 class 名稱就像是我們的名字
。package 名稱有很多 . 的,就好像是複姓。比如說 java.lang.String,就
是複姓 java.lang,名字為 String 的類別;java.io.InputStream 則是複姓
java.io,名字為 InputStream 的類別。
Java 會使用 package 這種機制的原因也非常明顯,就像我們取姓名一樣
,光是一間學校的同一屆同學中,就有可能會出現不少同名的同學,如果不取
姓的話,那學校在 處理學生資料,或是同學彼此之間的稱呼,就會發生很大的
困擾。相同的,全世界的 Java 類別數量,恐怕比台灣人口還多,而且還不斷
的 在成長當中,如果類別不使用套件名稱,那在用到相同名稱的不同類別時,
就會產生極大的困擾。幸運的是,Java 的套件名稱我們可以自己取,不像人
的姓沒有太大的選擇 ( 所以有很多同名同姓的 ),如果依照 Sun 的規範來取
套件名稱,那理論上 不同人所取的套件名稱不會相同 ( 請參閱 "命名慣例"
的相關文章 ),也就不會發生名稱衝突的情況。
可是問題來了,因為很多套件的名稱非常的長,在寫程式時,會多打好多
字,花費不少時間,比如說:
1 java.io.InputStream is = java.lang.System.in;
2 java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
3 java.io.BufferedReader br = new java.io.BufferedReader(isr);
實在是不美觀又麻煩。於是,Sun 想了一個辦法,就是 import。
這個 import 就是在程式一開頭的時候,先說明程式中會用到那些類別的
簡稱,也就是只稱呼名字,不 稱呼他的姓。首先,在檔案開頭寫:
1 import java.lang.System;
2 import java.io.InputStream;
3 import java.io.InputStreamReader;
4 import java.io.BufferedReader;
這幾行說明了這四個姓名的類別,在程式中只用他的名字來稱呼,所以當 程式
中提到 System 就是指 java.lang.System,而 InputStream 就是指
java.io.InputStream, 依此類推。於是原來的程式就變成:
1 InputStream = System.in;
2 InputStreamReader isr = new InputStreamReader(is);
3 BufferedReader br = new BufferedReader(isr);
這樣看起來是不是清爽多了呢?如果這些類別用的次數很多,那就更能體 會到
import 的好處了。可是這樣還是不夠,因為懶是人的天性,還是會有人覺得
打太多 import 了也很浪費時間,於是 Sun 又提供了一個方法:
1 import java.lang.*;
2 import java.io.*;
意思就是,等一下程式中提到的沒有姓名的類別,不是姓 java.lang,就是姓
java.io,如果這兩個裡面有同樣名字的類別,而不幸的你又只用名字稱呼這
個類別,那編譯器仍然會跟你抱 怨,因為它還是不知道你說的這個類別指那一
個姓的類別。那可不可以再懶一點呢,只寫:
1 import java.*;
歷史告訴我們,人可以懶,但不能太懶,這樣是不行的。因為那些類別是 姓
java.io 而不是姓 java。就像姓『諸葛』的人應該不會喜歡你稱他為『諸』
先生吧。
為甚麼我一開始說 import 跟 #include 不同呢?因為 import 的功能
到此為止,它不像 #include 一樣,會將檔案內容載入進來。import 只是請
編譯器幫你打字,讓編譯器把沒有姓的類別加上姓,並不會把別的檔案的程
式碼寫進來。如 果你想練習打字,可以不要使用 import,只要在用到類別的
時候,用它的全部姓名來稱呼它就行了(就像例子一開始那樣),跟使用
import 完全沒有甚麼兩樣。
另外,雖然人不可以太懶,但是 Sun 還是幫我們多偷了一點懶。因為
java.lang 這個套件實在是太常太常太常用到了,幾乎沒有程式不用它的,
所以不管你有沒有寫 import java.lang;,編譯器都會自動幫你補上,也就
是說編譯器只要看到沒有姓的類別,它就會自動去 java.lang 裡面找找看,
看 這個類別是不是屬於這個套件的。所以我們就不用特別去
import java.lang 了。
2010年4月21日 星期三
Eclipse 3.5 & Subclipse
http://protege.cim3.net/cgi-bin/wiki.pl?CompileProtegeCoreInEclipse
http://protege.cim3.net/cgi-bin/wiki.pl?CompileProtegeOWLInEclipse
Subclipse 安裝 (Subversion,簡稱SVN,是一個開放原始碼的版本控制系統。) 這篇才有效
http://oss-tw.blogspot.com/2009/06/eclipse-35-and-svn.html
http://sites.google.com/site/javaenterpriseeditiongroup/pm-of-software/reversion-control
http://protege.cim3.net/cgi-bin/wiki.pl?CompileProtegeOWLInEclipse
Subclipse 安裝 (Subversion,簡稱SVN,是一個開放原始碼的版本控制系統。) 這篇才有效
http://oss-tw.blogspot.com/2009/06/eclipse-35-and-svn.html
http://sites.google.com/site/javaenterpriseeditiongroup/pm-of-software/reversion-control
訂閱:
文章 (Atom)