2006-03-07

將MSSQL查詢的結果存到文字檔中

之前為了方便建立資料庫的預設資料,


所以用SQL的語法直接產生insert的指令,


例如 :


select 'insert into tableB values(''' + field1 + ''',''' + field2 + ''',''' + field3 + ''')' as expr from tableA


這樣所產生的結果會像是


insert into tableB values('a1','b1','c1')


insert into tableB values('a2','b2','c3')


insert into tableB values('a3','b3','c3')


然後只要把結果複製貼到文字檔中,


以後要建立預設資料時就可以直接用這個SQL script


不過,當資料筆數很多時,將結果複製貼上就有點麻煩了,


所以就想找一下MSSQL中有沒有像MYSQL那樣將結果直接存成檔案的指令,


果然還是有的,只是並不是直接在SQL的指令模式下執行,


而是要透過BCP(Bulk Copy Program),


指令如下 :


bcp "select 'insert into tableB values(''' + field1 + ''',''' + field2 + ''',''' + field3 + ''')' as expr from DatabaseName.dbo.tableA" queryout d:\ScriptName.txt -U 資料庫帳號 -P 資料庫密碼 -c


其實,如果只要用bcp就可以做資料匯出匯入的動作,


不需要再用語法產生insert into的指令.


關於BCP的相關介紹可以看下面這篇文章


Utilize BCP with SQL Server 2000

2006-03-02

更改資料庫的定序名稱

之前在查詢中文資料時,都是直接使用下列的語法


select * from tablename where fieldname like '%中文%'


但是今天在查資料時卻查不出任何東西,而且資料欄位中確實有"中文"的字樣,


查了一下,才發現只要在查詢的資料前加個N就可以了,語法如下 :


select * from tablename where fieldname like N'%中文%'


而這主要是因為資料庫的定序名稱所引起,


通常我們在建立資料庫時,定序名稱都是使用"伺服器預設值",


所以也很少去注意它.


雖然說只要查詢語法改一下就可以了,


但是為了以後維護上的方便,


所以打算將資料庫的定序名稱改成"Chinese_Taiwan_Stroke_CI_AS",


可是,從SQL Server Enterprise Manager並不能直接去做修改,


所以要下語法去異動,


而語法如下 :


ALTER DATABASE DatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE


ALTER DATABASE DatabaseName COLLATE Chinese_Taiwan_Stroke_CI_AS


ALTER DATABASE DatabaseName SET MULTI_USER WITH ROLLBACK IMMEDIATE


因為在改定序名稱時,必須先鎖定資料庫,


所以第一行要先將資料庫設定為SINGLE_USER,每次只能一個使用者存取資料庫,


然後再修改定序名稱,


修改完後再將資料庫改回 MULTI_USER 即可,


另外要執行這些指令值須先將所在的資料庫切換到master下.

Google以後可以查祖譜嗎?

今天看到一篇INDISE的文章 : 比爾蓋茲和賈伯斯,他們的孩子都是 14 歲才能用手機 想說比爾蓋茲不是有點年紀了嗎? 他的小孩應該也都不小了. 他們14歲時應該還沒有甚麼智慧手機吧… 說不定還是在BB call的年代. 所以就好奇的用google查一下有沒...