分類
Database

SQL Server自動備份通用方式(script)

新增一個資料庫, 第一件事要做的就是備份一次資料庫檔案.

偶而朋友發生SQL Server資料庫檔案故障的問題, 第一件事我會問有沒有做過備份, 其實也算是做最壞的打算, 利用 transaction log 配合之前的 database backup 應該可以 restore 大部分的資料, 但有可能連一次備份都沒做過的狀況下, 很有可能會發生資料庫整個救不回來的狀況. 所以安裝完資料庫後, 第一件事一定是要做好備份的規劃及策略.

這裡提供的方式, 是最懶人的方式, 就是利用 script 進行該資料庫的所有使用者資料庫備份, 利用查詢出 sysdatabases 中的非系統資料庫 (dbid > 4) 的備份, 指令如下:

分類
Database 懶得分類

SQL Server的Identity欄位使用/複製/重設

在資料庫中, 常用的一個流水編號通常會使用 identity 欄位來進行設置, 這種編號的好處是一定不會重覆, 而且一定是唯一的, 這對table中的唯一值特性很重要, 通常用來做客戶編號, 訂單編號等功能, 以下介紹關於此種欄位常用方式及相關技術.

後面的範例表皆以此表為建立:

CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
分類
Database

如何選出隨機資料

利用 sql command 可以查詢指定的資料, 有時因為功能上的需要, 希望能在 web 頁面上呈現價格最低, 或是到訪最高的資料, 這種取出固定的資料順序, 往往少了一些活發性.

我們可以利用資料庫的函數特性, 讓查詢出來的結果能有不同的順序, 可以增加訪客訪問的興趣. 不過導入又十分容易的方法囉.

MS SQL Server

select * from mydata order by NEWID()

其中 NEWID() 函數, 是取出 GUID, 不過我們是利用這個函數來進行排序的打散. 如此一來, 每次查詢, 就會有不同的隨機效果

分類
Database

用CTE來取出指定筆數 – SQL2005

SQL2005中有個CTE (Common Table Expression)功能十分強大, 可以用來做遞迴式的參考, 藉以達成複雜的查詢邏輯並簡化查詢指令, 是 SQL2005的一個新的重要功能.

在使用 MySQL 時, 可以容易地利用 limit m, n 的語法進行指定筆數的取得, 然而在 SQL Server這裡一直沒有這種功能. 這樣的需求通常是應用在分頁上會用到. 不過SQL Server可以利用 ADO存取方式內的分頁方法來進行, 也就避開了這個問題. 但無論如何, 仍是將所有的資料帶到查詢端(如客戶端或是中間層)後, 再進行分頁, 效能仍然不佳.

分類
Database

方便好用的Database Mail – SQL2005

有在用 SQL 2000的使用者還記得 SQL Mail吧. SQL Mail是利用MAPI的方式進行mail的傳遞, 在實務上往往會使用outlook配合exchange server來進行環境的建立, 也造成在使用SQL Mail前, 要準備好這些環境. 但在一般的應用上, 要使用SQL Mail, 又要有這些環境, 不見得很容易實現. 另外再加上SQL Mail在cluster環境時, 也要注意兩台的MAPI profile的設定, 才不會發生發不出mail的問題.

是的, 你的不方便, MS都知道, 到 SQL 2005後, 你會發現多了一個 Database Mail 的功能, 本篇文章就是來介紹這個方便又好用的 SQL Server發信方式. Database Mail 是基於 SMTP的方式來寄送信件, 所以很容易設定, 不太需要像 MAPI 需要 outlook 介面及 exchange server 配合寄送, 當然還是要建立 profile, 好讓 SQL Server 明白你要發信的帳號. 不過因為是走 SMTP, 所以設定也就容易多了. 而且 Database Mail 是能完全支援 cluster 的(因為是用 SQL Server 的機制, 而非外部的資源).