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 的大小)。這三種資料型態可以用來取代 text、ntext 以及 image 等資料型態。由 SQL Server 自行決定存放大型資料的方式,而不需我們事先決定要用指標結構存放 text 一類的資料,還是一般的 char 等資料格式。而以 VARCHAR(MAX)/NVARCHAR(MAX) 取代 text、ntext 最大的好處在於一般的 T-SQL 字串處理函數都可以操作 VARCHAR(MAX)/NVARCHAR(MAX) 欄位內的資料,而不像 text、ntext 會讓很多函數無法使用。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)
goDELETE 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)
goALTER 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 //服務名稱可看控制台中服務的名稱