2010年4月29日 星期四

[JS].日曆元件更新.201004229

說明: 增加 "縮小/放大" 及 "今天 (Today)" 的這2個按鈕.

執行畫面:


相關設定值:
isWinHeader: true (是否要顯示標頭)
isWinDrag: false (是否可以托曳)
isYearEditable: true (年份是否可以下拉選擇)
isMonthEditable: true (月份是否可以下拉選擇)
headerText: '日曆' (標頭要顯示的文字)



附註: 官網的版本, 如果您在 IE6 去使用, 會遇到多跑出一個圖層的話(因為 iframe 的 top 值有錯), 請改用附件裡我修改的版本, 只有修改 dhtmlxcalendar.js 裡的一行指令.



2010年4月28日 星期三

[SQL].判斷未滿20歲的人數是否過半

SELECT
CASE (SELECT COUNT(ACCOUNT) FROM memberdata) WHEN 0 THEN 'No'
ELSE
CASE
Floor(
( SELECT CONVERT(DECIMAL(8, 2), (SELECT COUNT(ACCOUNT) FROM memberdata WHERE Datediff("d", birthday, Getdate()) < 365.25*20) )
/
CONVERT(DECIMAL(8, 2), (SELECT COUNT(ACCOUNT) FROM memberdata))
) + 0.5
)
WHEN 0 THEN 'No' ELSE 'Yes'
END
END AS 'moreThanHalf'

2010年4月12日 星期一

[SQL].取上下筆資料的Sample

分享 T-SQL 的句子, 可以用來取上/下一筆的資料.

附註: row_number() over(...) 這個指令, 要 sql server 2005 以上的版本才有支援.


--// 取上一筆
select top 1 * from (select 欄位1,
row_number() over(order by 欄位2 desc) as rownum
from Table1) myData
where rownum < (
select rownum from (select 欄位1,
row_number() over(order by 欄位2 desc) as rownum
from Table1) myData
where id=?
)
order by rownum desc

--// 取下一筆
select top 1 * from (select 欄位1,
row_number() over(order by 欄位2 desc) as rownum
from Table1) myData
where rownum > (
select rownum from (select 欄位1,
row_number() over(order by 欄位2 desc) as rownum
from Table1) myData
where id=?
)


--// 取自己 rownum
select rownum from (select 欄位1,
row_number() over(order by 欄位2 desc) as rownum
from Table1) myData
where id=?



特別感謝: 鈺鈞告訴我有這個指令.


2010年4月8日 星期四

[Tool].網頁debug工具--Fiddler2

檔案下載:

以下是轉貼的資料:


Fiddler算是微軟的一個「地下產品」。這軟體是免費的、也不推廣、不掛Micorsoft LOGO。

他是一套Debug軟體,會監測我們「看網站」的時候,究竟讀取了哪些網頁、程式、圖片、Flash、JavaScript、影片、CSS。除了Debug的功用之外,換個思路,就可以幫設計師做到一些怪怪的事情。

例如:
1. 抓Flash:
很多Load 來 Load去的Flash網站,你原本只能抓到一個最外層的swf,但現在可以把那些「看的到、但抓不到」的swf全部抓下來。

2. 抓JS,CSS:
不用看HTML原始碼,就知道某網站用了哪些JavaScript、CSS。

3. 抓FLV:
不用看原始碼,就把無名影音或是Youtube的影片(flv)抓回來。
4. 抓圖:
Flash裡頭Load的圖檔。

5. 輕鬆解決網頁設計時的「路徑問題」,尤其是跨網域或是目錄很多層,又有html又有flash的時候。

步驟是:
1. 打開IE。按下Fiddler的按鈕。(可以從Rules\ Hide Images選項,關掉gif,jpg等圖片的紀錄)
2. 進入你要監測的網站。
3. 視窗上面,會出現該網站全部的Session紀錄。(如下圖)
4. 無論你做什麼動作,IE讀取過哪些程式、flash,都會給你網址。

網路行銷參考案例左邊小圖示會告訴你相關的檔案類型,還有結果的http代碼(例如404是找不到檔案)

自己試試。http://www.fiddlertool.com/fiddler/


必須安裝.net framework才能啟動fiddler
http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&DisplayLang=zh-TW

2010年4月4日 星期日

檢查 SQL Server 有哪些索引應該被重建

如果不能直接執行的話, 要到資料庫屬性 => 選項 => 資料庫相容性層級,會出錯的資料庫相容性層級本來是SQL SERVER 2000(80),改成SQL Server 2005(90)即可。

下面的文章由 will 發表於 2009/1/18:

讓 SQL Server 告訴你有哪些索引應該被重建或重組

我去年有一段時間睡覺前都在看 SQL Server 2005 證照的書(MCTS 70-431),從中學到許多資料庫實際運作的技術細節,例如: 索引的結構。當資料庫中的索引碎裂(index fragmentation)程度過高時,索引的效率就會大大降低,為了避免這個問題發生,就必須定時替資料庫健檢(維護資料庫),也就是進行索引重建(rebuild)或索引重組(reorganize)。

Microsoft SQL Server 2005 實作與維護 Ⅱ 此書的第12章有提到你可以透過 SELECT 指令搭配 sys.dm_db_index_physical_stats 這個動態管理函示(DMF, Dynamic Management Function) 可以查出資料庫中所有索引的碎裂狀態,如下 T-SQL 語法:

SELECT OBJECT_NAME(dt.object_id) ,

si.name ,

dt.avg_fragmentation_in_percent,

dt.avg_page_space_used_in_percent

FROM

(SELECT object_id ,

index_id ,

avg_fragmentation_in_percent,

avg_page_space_used_in_percent

FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'DETAILED')

WHERE index_id <> 0

) AS dt --does not return information about heaps

INNER JOIN sys.indexes si

ON si.object_id = dt.object_id

AND si.index_id = dt.index_id


執行後的結果長這樣:

查出資料庫中所有索引的碎裂狀態

但何時該做索引重建(ALTER INDEX…REBUILD)?又何時該做索引重組(ALTER INDEX…REORGANIZE)呢?此書也有提供一些建議值供資料庫管理員在進行索引維護時的參考。

索引重組的時機

  • 檢查 External fragmentation 部分
    • 當 avg_fragmentation_in_percent 的值介於 10 到 15 之間
  • 檢查 Internal fragmentation 部分
    • 當 avg_page_space_used_in_percent 的值介於 60 到 75 之間

索引重建的時機

  • 檢查 External fragmentation 部分
    • 當 avg_fragmentation_in_percent 的值大於 15
  • 檢查 Internal fragmentation 部分
    • 當 avg_page_space_used_in_percent 的值小於 60

由於索引的維護都是透過 ALTER INDEX 進行的,所以即便索引的數據分析出來後還是要人工下 ALTER INDEX 指令來重建或重組索引。最近看到一篇文章分享一個很實用的 T-SQL 指令,他可以自動幫你算出哪些索引需要被重建或重組,而且直接幫你把 ALTER INDEX 的 T-SQL 都寫好,程式碼如下:


SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' +

CASE

WHEN ps.avg_fragmentation_in_percent > 15

THEN 'REBUILD'

ELSE 'REORGANIZE'

END +

CASE

WHEN pc.partition_count > 1

THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX))

ELSE ''

END,

avg_fragmentation_in_percent

FROM sys.indexes AS ix

INNER JOIN sys.tables t

ON t.object_id = ix.object_id

INNER JOIN sys.schemas s

ON t.schema_id = s.schema_id

INNER JOIN

(SELECT object_id ,

index_id ,

avg_fragmentation_in_percent,

partition_number

FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)

) ps

ON t.object_id = ps.object_id

AND ix.index_id = ps.index_id

INNER JOIN

(SELECT object_id,

index_id ,

COUNT(DISTINCT partition_number) AS partition_count

FROM sys.partitions

GROUP BY object_id,

index_id

) pc

ON t.object_id = pc.object_id

AND ix.index_id = pc.index_id

WHERE ps.avg_fragmentation_in_percent > 10

AND ix.name IS NOT NULL


這段 T-SQL 只有檢查 External fragmentation 部分而已,而且上面分享的這段 T-SQL 語法與原文的數值不太一樣,我有調整過,讓判斷的臨界值符合 Microsoft SQL Server 2005 實作與維護 Ⅱ 書中建議的數值。以下是執行結果的圖示:

自動幫你算出哪些索引需要被重建或重組的結果

你只要複製這些語法,並且執行一遍,就可以完成索引維護了。

相關連結



Facebook 留言板