2011-01-17

MS SQL-字串函數-STUFF

MS SQL中內建了一STUFF函數,
可於字串指定位置插入指定字串,
STUFF(原字串,起始位置,刪除長度,插入字串)
select STUFF('abc',2,0,'123')
------
a123bc

(1 個資料列受到影響)
select STUFF('abc',2,1,'123')
------
a123c

(1 個資料列受到影響)
select STUFF('abc',2,2,'123')
------
a123

(1 個資料列受到影響)
參考自:MSDN-STUFF

2011-01-07

SQL Server 資料表空間耗用查詢

sql server使用久了,裡面的資料量越來越多,
所耗掉的硬碟空間也日益膨脹,
有些自行做記錄表,可以考慮將某區間的記錄移出或刪除,
sql server有提供單個資料表使用空間查詢-sp_spaceused
如果要將資料庫內的資料表做空間使用排序,可是用下列方式
if (select OBJECT_ID('tempdb..#DB_Spece')) IS NOT NULL Drop Table #DB_Spece
Create table #DB_Spece 
 (Name varchar(200),
  Rows int,
  Reserved varchar(200),
  Data varchar(200),
  Index_size varchar(200),
  Unused varchar(200))
exec sp_MSforeachtable "insert into #DB_Spece exec sp_spaceused '?'"

--預設以KB顯示,下列以計算為MB
select name,rows,
  reserved=(convert(integer,replace(Reserved,' KB',''))/1024),
  data=(convert(integer,replace(Data,' KB',''))/1024),
  index_size=(convert(integer,replace(Index_size,' KB',''))/1024),
  unused=(convert(integer,replace(Unused,' KB',''))/1024)
from #DB_Spece 
order by CAST(replace(Data,' KB','') as Integer) desc

2011-01-06

InputBox 缺字

在Delphi中使用inputbox時,
若欲顯示的字串為中文時,會發生掉字的問題,
這是因為inputbox上預設的字型為英文字,
遇到中文字會有長度判斷上面錯誤的問題,
有兩種方式解決這樣的問題,

一、利用Delphi內建變數DefFontData.Name修改預設字型
DefFontData.Name := 'MingLiU';//**細明體

二、在字串後方加上兩個空白字元

2010-12-18

group by 群組小計

常常會用到group by做群組,
如果需要統計群組的數值,可以利用下列兩個函式,

ROLLUP-針對類別做組統計

CUBE-針對各群組類別作小計及全部總計

參考自
MSDN-GROUPING SETS、ROLLUP 和 CUBE 的執行計畫
VITO の SQL 學習筆記-分組查詢

2010-10-12

Delphi7 安裝 QuickReport

Delphi 7 安裝完畢後,
預設並不會將QuickReport的Package裝進去,
安裝方式如下:
Component-->Install Packages-->ADD
檔案路徑選擇如下:
C:\Program Files\Borland\Delphi7\Bin\dclqrt70.bpl

2010-07-21

SQL小數計算

在SQL Server中正整數除於正整數得到的結果也是正整數,
但是有時候會有需要計算到小數後幾位時可使用CAST函數進行型態轉換!
select cast(10 as decimal(10,5))/cast(3 as decimal(10,5))
---------------------------------------
3.3333333333333333
select ROUND(cast(10 as decimal(10,5))/cast(3 as decimal(10,5)),5)
---------------------------------------
3.3333300000000000
select Convert(decimal(10,5),ROUND(cast(10 as decimal(10,5))/cast(3 as decimal(10,5)),5))
---------------------------------------
3.33333
參考自:Microsoft TechNet-CAST 和 CONVERT

2010-07-20

設定SQL每週起始日

因為工作日統計的需求,有些公司會將星期日設為每週的第一天,
但有些公司是將星期一設為每週的第一天,而在SQL Server 2008中,
系統欲設為星期日為每週的第一天(可使用@@DATEFIRST查詢),
若因為統計需求配合其他日期函數,在撈取時可以使用SET DATEFIRST函數,
設定每週起始日,如SET DATEFIRST 1,表示將星期一設為每週的第一天,
此設定僅在該是連線建立上有效,不影響系統上的設定!
SET DATEFIRST 1
select @@DATEFIRST
-----------------------------
1
參考自:Microsoft TechNet-SET DATEFIRST

2010-05-22

MS SQL Server 相關系統指令

--查詢資料表相關使用空間
sp_spaceused TableName

--查詢資料表資料結構
sp_help TableName 

--查詢資料庫內所有表格
select * from INFORMATION_SCHEMA.TABLES

--查詢資料庫內所有欄位
select * from INFORMATION_SCHEMA.COLUMNS

2009-12-28

清除MS SQL Server Management Studio 清除連線記錄

時常連線至不同SQL Server主機及用戶名稱,
累積久了,會有很多用不到的紀錄,
若要清除可以到下列的資料夾刪除檔案,即可!
C:\Documents and Settings\XXX\Application Data\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin
XXX為使用者代號!

2009-12-26

MS SQL Server 2008 無法儲存資料表結構變更

使用MS Server Management Studio修改資料表結構時,
存檔時若顯示下列訊息
『不允許儲存變更。 您所做的變更會需要下列資料表卸除並重新建立。 您有做任何變更一個資料表,無法重新建立或啟用選項會防止儲存變更,需要重新建立資料表。』
請到
工具-->選項--> 設計師-->資料表和資料庫設計工具-->防止儲存需要資料表重建的變更

把勾選拿掉,即可解決!