MS-SQL

SQL Server 2005

SQL Server 2005預設安裝起來時, 關閉了TCP/IP與具名管道(Named Pipes)的連接方式, 可利用SQL Server Configuration Manager中的SQL Server 2005網路組態將其開放

SQL Server 2005提供了許多命令提示字元公用程式, 可在SQL Server線上叢書查得到, 例如使用sqlcmd來執行 sql 程式碼

sqlcmd -S ComputerName\InstanceName -i MyScript.sql -o MyOutput.rpt

資料庫檔案

SQL Server 2005 資料庫(預設放在目錄C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data)具有三種檔案類型:

n           主要資料檔
主要資料檔是資料庫的起點,並指到資料庫中的其他檔案。每個資料庫都有一個主要資料檔案。建議您將主要資料檔的副檔名設為 .mdf 

n           次要資料檔
次要資料檔是由主要資料檔以外的所有資料檔所組成。有些資料庫可能不包含任何次要資料檔,而有些則擁有數個次要資料檔。建議您將次要資料檔的副檔名設為 .ndf

n           記錄檔
記錄檔中保存可用來復原資料庫的所有記錄資訊。每一個資料庫至少要有一個記錄檔,也可以有多個記錄檔。建議的記錄檔副檔名為 .ldf

SQL Server 2005 中,資料庫中所有檔案的位置都會記錄在資料庫的主要檔案(*.mdf),以及記錄在 master 資料庫中。SQL Server Database Engine 大部份時間都會使用 master 資料庫所提供的檔案位置資訊。然而,在下列情況下,Database Engine 會使用主要檔案所提供的檔案位置資訊,來初始化 master 資料庫中的檔案位置項目:

n           使用 CREATE DATABASE 陳述式搭配 FOR ATTACH FOR ATTACH_REBUILD_LOG 選項,來附加資料庫時。

n           SQL Server 2000 版或 7.0 版升級到 SQL Server 2005 時。

n           還原 master 資料庫時。

新的資料型態

SQL Server 2005 針對於字串與XML的儲存提供了新的資料型態:
1.VARCHAR(MAX)
2.NVARCHAR(MAX)
3.VARBINARY(MAX)
當宣告了 MAX 關鍵字,該欄位最多可以存放 2Giga (2^31-1)位元組的資料。而不再受限於以往的 8K(也就是 Page 的大小)。這三種資料型態可以用來取代 textntext 以及 image 等資料型態。由 SQL Server 自行決定存放大型資料的方式,而不需我們事先決定要用指標結構存放 text 一類的資料,還是一般的 char 等資料格式。而以 VARCHAR(MAX)/NVARCHAR(MAX) 取代 textntext 最大的好處在於一般的 T-SQL 字串處理函數都可以操作 VARCHAR(MAX)/NVARCHAR(MAX) 欄位內的資料,而不像 textntext 會讓很多函數無法使用。

4.XML:原生的 XML 資料型態,可以提供 XML 資料驗證、查詢、更新、建立索引等等。該型態的資料最大長度也是 2 Giga 位元組。

查出table中的紀錄中哪些欄位重複

例如有一資料表有欄位A,B,C,D,其中有許多筆紀錄重複了,如何用SQL找出有哪些完全相同的紀錄,並顯示出重複的次數

Select *, count(*) as 重複次數
from table
group by A,B,C,D
having count(*)>1

刪除table中的重複紀錄

ALTER TABLE admin ADD NewID int IDENTITY (1, 1)
go

DELETE FROM admin WHERE EXISTS
(SELECT 1
FROM admin a
WHERE a.newid > admin.newid AND
admin.uid = a.uid AND
admin.uname = a.uname AND
admin.upass a.upass AND
admin.udep = a.udep)
go

ALTER TABLE admin DROP COLUMN NewID
go

T-SQL

Microsoft SQL Server使用的SQL語法稱之為Transact SQL,簡稱T-SQL

case

SQL CASE 是一種通用的條件表達式,類似於其他語言裡的 if/else 語句. CASE 子句可以用於任何可以有效存在的地方。

CASE WHEN condition THEN result [ WHEN ... ] [ ELSE result ] END

condition 是一個傳回 boolean 的表達式. 如果結果為真,那麼 CASE 表達式的結果就是 result 如果結果為假,那麼以相同方式搜尋任何隨後的 WHEN 子句. 如果沒有 WHEN condition 為真,那麼 case 表達式的結果就是在 ELSE 子句裡的值. 如果省略了 ELSE 子句而且沒有相符的條件, 結果為 NULL

範例:

SELECT a , b, c=
  
CASE WHEN a=1 THEN 'one'
     
WHEN a=2 THEN 'two'
ELSE 'other'
END
FROM test ;

所有 result 表達式的資料的類型 都必須可以轉換成單一的輸出類型。

CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ] END

這個 "簡單的" CASE 表達式是上面 的通用形式的一個特殊的變種. 先計算 expression 的值, 然後與所有在 WHEN 子句裡的 value 對比,直到找到一個相等的.如果沒有找到相符的,則傳回在 ELSE 子句裡的 result (或者 NULL).這個類似於 C 裡的 switch 語句.

範例:

SELECT a ,
  
CASE a WHEN 1 THEN 'one'
     
WHEN 2 THEN 'two'
ELSE 'other'
  
END
FROM test

Unicode的寫入

n           SQL Server中對於可能存放Unicode的欄位必須要用 NCHAR,NVARCHAR,NTEXT 這些定義才不會發生儲存的錯誤。

n           當您在 SQL Server 中處理 Unicode 字串常數時,必須在所有 Unicode 字串之前加上大寫字母 N(prefix N) ,例如

insert into (A,B,C) values (N'萬國碼xxx', N'萬國碼yyy', N'萬國碼zzz') //記住N要大寫喔

UPDATE student SET name = N'萬國碼' WHERE sid = 's9154610' //記住N要大寫喔

清除交易紀錄檔

sql的交易紀錄一直沒有去清除的話,會導致整個資料庫都不能使用,此時我們可以在 Query Analyzer 中鍵入下列指令

backup log 資料庫名 with NO_LOG | TRUNCATE_ONLY

此指令之用意為備份資料庫的Log檔,由於我們在上述語法中沒有指定備份的裝置為何,Sql Server即會認為此動作為單純要把已交易完成的Log資料清空(已交易完成的資料所指即為已commit的資料),而Truncate_Only的選項則是告訴Sql Server目的在清空Log之空間,至於清出的空間則由Sql Server管理,不還給OS NO_LOG TRUNCATE_ONLY 是同義字。

壓縮指定資料庫中資料檔的大小

dbcc shrinkdatabase (資料庫名 , { NOTRUNCATE | TRUNCATEONLY } )

n           NOTRUNCATE :讓已釋放的檔案空間保留在資料庫檔案內。若未指定,會釋放檔案空間給作業系統。

n           TRUNCATEONLY:讓資料檔中任何未使用的空間釋放給作業系統,並將檔案縮到上一次配置的範圍。

壓縮目前資料庫指定的資料檔或記錄檔的大小

dbcc shrinkfile ( 指定檔名 [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ] )

n           NOTRUNCATE :讓已釋放的檔案空間保留在檔案中。

n           TRUNCATEONLY :讓檔案中任何未使用的空間釋放到作業系統,在不移動任何資料的情形下縮減檔案大小。

backup log education with NO_LOG
dbcc shrinkfile (education_log , truncateonly)

其它

sql server要如何輸入null? => ctrl+0
sql
的單行註解使用--,多行註解使用 /* */
sql
binary欄位轉到VFP會變成Memo
VFP
logical欄位轉到sql上要改用bit
VFP
date欄位轉到sql上要改用datetime

在命令列上停止SQL Server的服務

net stop mssqlserver stop  //服務名稱可看控制台中服務的名稱

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 snowman 的頭像
    snowman

    snowman的部落格

    snowman 發表在 痞客邦 留言(0) 人氣()