廣告

2024 年 11 月
 123
45678910
11121314151617
18192021222324
252627282930  

彙整

SQL Server 自動判別索引是否需要重建T-SQL與重建索引方式

參考網址:http://blog.miniasp.com/post/2009/01/18/Let-SQL-Server-Tell-You-Which-Indexes-to-Rebuild-or-Reorganize.aspx

自動查詢與建議索引重建之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 […]

SQL2005匯入EXCEL注意事項

SQL2005匯入EXCEL注意事項

這兩天測試從SQLA使用SQL指令查詢的資料匯出成EXCEL,然後再匯入SQLB同個資料表內,可是一直失敗,後來同事說,EXCEL要匯入SQL2005,必須把EXCEL內的SHEET NAME改成你要匯入的TABLE NAME,才可以正確匯入。

匯出EXCEL:

選擇來源(從SQL匯出)

選擇目的地(匯出到EXCEL)

這邊我只要裡面的一小段資料,所以用SQL指令方式篩選取資料

完成匯出,可在D槽看到該EXCEL檔案。

 

匯入EXCEL

假設要會入123資料庫底下的456 TABLE,那EXCEL內的Sheet Name 要改成 456 才能正確匯入,匯入方式如同上面匯出,只是來源與目的地對調而已。

SQL 預存程序 Stored Procedures

一直都不知到啥是預存程序,後來大概知道它是做什麼用的,直到現在才開始面對它,大概了解一下它怎麼用。

出處:http://yes.nctu.edu.tw/SQL/StoredProcedure/StoredProcedure.htm

撰寫 Stored Procedures

利用 ADO 來存取資料庫是一件既輕鬆又簡單的工作, 不過有的時候又臭又長的 SQL 敘述實在很煩人, 這篇文章將介紹如何利用 Stored Procedure 來簡化你的 ASP 程式

本質上 Stored procedures (有時又稱 Sproc) 就是儲存在資料庫中的 Script 或 Batch, 撰寫 Sproc 並不是太難的一件事, 通常你會這樣查詢資料庫

Select * From Table

如何將它變成 Sproc? 以下是簡單的例子

Create Proc sp_SprocName1 As   Select * From Table Go […]

SQL2005 改變預設資料庫

預設資料庫看起來沒什麼,但是如果您剛好把預設資料庫離線…………那好笑的事就發生了,你會無法再使用SQL Server Enterprise Manager登入,會出現類似 無法開啟使用者預設資料庫。登入失敗。的訊息,要再讓剛離線的資料庫上線也不行,阿程式也不會自動詢問或是自動幫您改成其它預設資料庫,只能說  掯~~~微”軟” 的SQL2005 實在有夠笨…………………

 

問題出現了還是要解決,

登入時先選別的資料庫

下指令把預設資料庫修正即可 

參考資訊:http://support.microsoft.com/kb/196076/zh-tw

SQL將兩個Table各自的某個欄位合併成一個欄位秀出

SELECT declno as no FROM decldatah  union all  SELECT declno FROM decldatab 

SQL語法 Left Join

看科學家研究,人會覺得走在左邊的人比較有男(女)人味,因此想泡妞的請走在女伴的左邊……………不是沒有道理的,台灣屬於靠右邊走的習慣,如果男士在女生左邊,會有保護女生讓女生走比較路邊比較安全的感覺……………………….再說連電腦SQL語法也是要你在左邊呢!!!!

 

昨天去書店剛好看到有介紹Join的書翻了一下,發現 left join 正符合我的需求,試了三個Table的 left Join一次把我要的都列表出來,省了另外兩個額外查詢,看文獻也說使用join比較有效率。

select g.*, cbas.custid, cbas.cmpabv, cntc.cntcid, cntc.phone from dbo.gdsinfomt g left join dbo.custbas cbas on (g.Agent = cbas.custid) left join dbo.custcntc cntc on ((g.Agent = cntc.custid) and (cntc.cntcid = substring(g.declno,1,2))) where g.senddate >= ‘20100128’ and g.senddate <= ‘20100128’ […]

SQL中擷取字串

SQL與法中直接擷取字串的函式使用 substring(原字串, 啟始取值位置, 欲取的字元數)

這裡與DELPHI的Copy用法一摸摸一樣樣~

範例:取g.declno前兩字元

cntc.cntcid = substring(g.declno,1,2)

[SQL Server]Auto Close(自動關閉) – SQL效能

文章出處:http://www.dotblogs.com.tw/jimmyyu/archive/2009/07/03/9088.aspx

這是一個曾經發生過的案例,兩年前我在客戶家處理一個效能的案子時,客戶告知:你們的系統最近跑起來比過去慢了不少,每個動作平均大約慢了2-3秒鐘,我心想:我們最近不會改了什麼東西吧。

本著追根究柢的精神,開始跟客戶喇勒:最近有人做什麼嗎?有人版更嗎?DBA有改設定嗎?MIS有做系統調整嗎?這一連串的閒聊問答,最後得到的結果很好:沒有….

根據我在客戶家處理多年問題的經驗,客戶有這種回答也是很合理的,但我直覺問題並不單純,就開始進行問題的測試,從一些現象上看起來,最後把問題轉到DB上去了,最後找到DB中有個設定被修改了,這個設定叫作Auto Close(自動關閉),詳細的內容可以看這個連結,講的蠻清楚的:http://sharedderrick.blogspot.com/2009/02/autoclose.html

針對這個設定有個地方要特別注意,在SQL Server 2000以前,Create database時,這個值預設是ON;SQL Server 2005以上的版本預設值則是OFF。

 

 

http://sharedderrick.blogspot.com/2009/02/autoclose.html

=============================================================================================================認識 SQL Server Database 資料庫選項:AUTO_CLOSE(自動關閉)

資料庫 AUTO_CLOSE 選項

選項值 說明

ON(True)

當設定為:ON 時,資料庫會完全關閉,並在最後一個使用者結束之後釋放其資源。當使用者試圖重新使用資料庫時,會自動重新開啟資料庫。例如,藉由發出 USE database_name 陳述式。

這個選項可能會造成經常存取之資料庫的效能降低,因為在每一個連接之後都會增加開啟和關閉資料庫的負擔。 而且在每一個連接之後,啟用此選項也會排清程序快取。

對於桌面資料庫而言,啟用此選項非常有用,因為它可讓您將資料庫檔案當做一般檔案來管理。您可以移動它們、複製它們來建立備份,甚至可以用電子郵件將它們傳給其他使用者。

在舊版 SQL Server 中,AUTO_CLOSE 是同步處理序,當有重複建立和中斷與 Database Engine 之連接的應用程式存取資料庫時,該處理序可能會降低效能。從 SQL Server 2005 開始,AUTO_CLOSE 處理序是非同步的;重複開啟和關閉資料庫不再降低效能。

當啟用此選項時,sys.databases 目錄檢視中的某些資料行及 DATABASEPROPERTYEX 函數會傳回 NULL,因為資料庫無法擷取資料。若要解決這個問題,請執行 USE 陳述式來開啟資料庫。

此啟用使選項也會造成,當資料庫關閉的作業執行時,會自動清除 SQL Server 執行個體的計畫快取。

若清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。在 SQL Server 2005 Service Pack 2 中,針對每次清除計畫快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 […]

SQL Profiler

SQL查詢問題點時的好工作。

文章出處: http://www.dotblogs.com.tw/jimmyyu/archive/2009/05/03/8280.aspx

====================================================================================

這個工具可以在SQL Server的效能工具中找到,

點選左上角的新增查詢,

輸入帳號密碼後會出現如下畫面,一般的追蹤我會先切換到[事件選取範圍]頁籤,

把event都反勾選,只留下RPC Completed跟SQL BatchCompleted兩個,只截取實際執行的SQL指令內容,

接著在SQL Profiler中我們就可以看到所有執行的SQL指令了,不管是正確的SQL或者錯誤的SQL都會被記錄,包含執行的SQL語法、所花費的時間、登入代號….

當我們有以下問題時:

1.懷疑有其他系統在存取我們資料庫時,可透過這個工具來檢查是否有異常的SQL指令被執行

2.無法判斷是程式問題還是SQL指令問題時,SQL指令有執行,但程式沒有反應,則可能是SQL的問題,但也可能是SQL指令的問題,可透過此工具逐步追蹤

3.系統效能不彰時,協助找出是否某一句SQL寫的不好所導致

4.客戶端除錯時,我們沒有辦法在客戶的Server上安裝VS來debug,這個工具可以提供部分資訊給我們

…..很多時候這個工具都可以幫我們解決到很多問題,所以絕對要會使用這個好用的工具才行。

MySQL日期函數應用

查詢現在日期

mysql> select now(); +———————+ | now()                 | +———————+ | 2009-12-16 14:56:18 | +———————+ 1 row in set (0.00 sec)

 

結果只秀年月日 yyyy-mm-dd

mysql> select curdate(); +————+ | curdate()  […]