Microsoft SQL Server 2000 超級管理手冊(十三)

13. T-SQL 與 SQL Query Analyzer

什麼是SQL?

什麼是 T-SQL?

介紹 T-SQL 的新特色

如何使用 T-SQL

本章總結

在本章中我們將介紹結構化查詢語言〈Structured Query Language,SQL〉與Transact-SQL〈T-SQL〉一些基本的觀念以及這兩種語言之間的差異。本章解釋了資料定義語言〈DDL〉與 資料操作語言 ,並且包含了範例。我們也將簡單介紹 Microsoft SQL Server 2000 中 T-SQL的新功能。您將學習如何使用不同的 SQL Server 公用程式來建立和管理資料庫物件,包括命令列 T-SQL 和 SQL Query Analyzer。您也可以學到建立 T-SQL 指令碼的相關知識。

什麼是SQL?
 

SQL 是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯式資料庫系統。美國國家標準局(ANSI)與國際標準化組織(ISO)已經制定了 SQL 標準。ANSI 是一個美國工業和商業集團組織,發展美國的商務和通訊標準。ANSI 同時也是 ISO 和 International Electrotechnical Commission(IEC)的成員之一。ANSI 發佈與國際標準組織相應的美國標準。1992年,ISO 和 IEC 發佈了 SQL 的國際標準,稱為 SQL-92。ANSI 隨之發佈的相應標準是 ANSI SQL-92。ANSI SQL-92 有時被稱為 ANSI SQL。儘管不同的關聯式資料庫使用的 SQL 版本有一些差異,但大多數都遵循 ANSI SQL 標準。SQL Server 使用 ANSI SQL-92 的擴展集,稱為 T-SQL,其遵循 ANSI 制定的 SQL-92 標準。

SQL 語言包括兩種主要程式設計語言類別的陳述式: 資料定義語言 (DDL)與 資料操作語言 (DML)。下面我們將介紹這兩類語言。

DDL
 

DDL 用於定義和管理物件,例如資料庫、資料表以及檢視表( 第18章 將會解釋何謂檢視表)。DDL 陳述式通常包括每個物件的CREATE、ALTER 以及 DROP 命令。舉例來說,CREATE TABLE、ALTER TABLE 以及 DROP TABLE 這些陳述式便可以用來建立新資料表、修改其屬性(如新增或刪除資料行)、刪除資料表等,下面我們會一一介紹。

CREATE TABLE 陳述式
 

使用 DDL 在 MyDB 資料庫建立一個名為 Customer_Data 的範例資料表,本章後面的例子我們會使用到這個資料表。如前所述,CREATE TABLE 陳述式可以用來建立資料表。這個範例資料表被定義成四個資料行,如下所示:

Use MyDB
CREATE TABLE Customer_Data
(customer_id smallint,
first_name char(20),
last_name char(20),
phone char(10))
GO

這個陳述式能產生 Customer_Data 資料表,這個資料表會一直是空的直到資料被填入資料表內。關於建立資料庫資料表的細節,請參閱 第10章 。

ALTER TABLE 陳述式
 

ALTER TABLE 陳述式用來變更資料表的定義與屬性。在下面的例子中,我們利用 ALTER TABLE 在已經存在的 Customer_Data 資料表中新增 middle_initial 資料行。

ALTER TABLE Customer_Data
ADD middle_initial char(1)
GO

現在資料表的定義包括了五個資料行,而不是之前的四個資料行。關於使用ALTER TABLE 的更多細節,請參閱 第15章 。

DROP TABLE 陳述式
 

DROP TABLE 陳述式用來刪除資料表定義以及所有的資料、索引、觸發程序、條件約束以及資料表的權限。要刪除我們的 Customer_Data 資料表,可利用下列命令:

DROP TABLE Customer_Data
GO

關於 DROP TABLE 陳述式的詳細內容,請參閱 第15章 。

DML
 

DML 利用 INSERT、SELECT、UPDATE 及 DELETE 等陳述式來操作資料庫物件所包含的資料。

INSERT 陳述式
 

INSERT 陳述式用來在資料表或檢視表中插入一列資料。例如,如果要在Customer_Data 資料表中新增一個客戶,可使用類似以下的 INSERT 陳述式:

INSERT INTO Customer_Data
(customer_id, first_name, last_name, phone)
VALUES (777, "Frankie", "Stein", "4895873900")

請注意 SQL 陳述式中第二行的資料行名稱清單,清單上資料行名稱的次序決定了資料數值將被放在哪個資料行。舉例來說,第一個資料數值將被放在清單列出的第一個資料行 customer_id、第二個資料數值放在第二個資料行,依此類推。由於我們在建立資料表時,定義資料資料行填入數值的次序與現在相同,因此我們不必特意指定欄位名稱。我們可以用以下的 INSERT 陳述式代替:

INSERT INTO Customer_Data
VALUES (777, "Frankie", "Stein", "4895873900")

注意

如果使用這種形式的 INSERT 陳述式,但被插入的數值次序上與建立資料表時不同,數值將被放入錯誤的資料行。如果資料的型別與定義不符,則會收到一個錯誤訊息。


SELECT 陳述式
 

SELECT 陳述式用來檢索資料表中的資料,而哪些資料被檢索由列出的資料行與陳述式中的 WHERE 子句決定。例如,要從之前建立的 Customer_Data 資料表中檢索 customer_id 以及 first_name 資料行的資料,並且只想取出每列中 first_name 資料行值為 Frankie 的資料,那麼可以利用以下的 SELECT 陳述式:

SELECT customer_id, first_name FROM Customer_Data
WHERE first_name = "Frankie"

如果有一列符合 SELECT 陳述式中的標準,則結果將顯示如下:

customer_id     first_name
-------------    ------------
777              Frankie

UPDATE 陳述式
 

UPDATE 陳述式用來更新或改變一列或多列中的值。例如,一位名稱為 Frankie Stein 的客戶想要在記錄中改變他的姓氏為 Franklin,可使用以下 UPDATE 陳述式:

UPDATE Customer_Data
SET first_name = "Franklin"
WHERE last_name = "Stein" and customer_id= 777

我們在 WHERE 子句中加入 customer_id 的項目來確定其他名稱為 Stein 的客戶不會被影響-只有customer_id為777的客戶,姓氏會有所改變。


說明

當您使用 UPDATE 陳述式時,要確定在 WHERE 子句提供充份的篩選條件,如此才不會不經意地改變了一些不該改變的資料。


DELETE 陳述式
 

DELETE 陳述式用來刪除資料表中一列或多列的資料,您也可以刪除資料表中的所有資料列。要從 Customer_Data 資料表中刪除所有的列,您可以利用下列陳述式:

DELETE FROM Customer_Data
或
DELETE Customer_Data

資料表名稱前的 FROM 關鍵字在 DELETE 陳述式中是選擇性的。除此之外,這兩個陳述式完全相同。

要從 Customer_Data 資料表中刪除 customer_id 資料行的值小於100的列,可利用下列陳述式:

DELETE FROM Customer_Data
WHERE customer_id < 100

現在我們已經快速瀏覽了 SQL 提供的 DDL 與 DML 陳述式,接著,下面將介紹 T-SQL。

什麼是 T-SQL?
 

T-SQL 是標準 SQL 程式設計語言的增強版,它是用來讓應用程式與 SQL Server 溝通的主要語言。T-SQL 提供標準 SQL的DDL 和 DML 功能,加上延伸的函數、系統預存程序以及程式設計結構(例如 IF 和 WHILE)讓程式設計更有彈性。T-SQL 的功能隨著新版的 SQL Server 而持續成長,讓我們來看一下 T-SQL 最新增加的特色。

介紹 T-SQL 的新特色
 

在 Microsoft SQL Server 7.0 中 T-SQL 有著為數不少的新增功能,包括新的預存程序、系統資料表、函數、資料型別、陳述式以及現存陳述式中的選項。這些都被保留在 SQL Server 2000 中,因此我們在這裡要先回顧 (特別是在您還不很熟悉 SQL Server 7.0 中 T-SQL 的功能,這個溫習就很重要了)。因為有太多的新功能需要討論,在此我們僅為每個類別舉少數例子來加以介紹。


相關資訊

要找尋這些功能的完整清單,可以參考 SQL Server《線上叢書》中 「Transact-SQL新增與加強的功能」 主題。


系統預存程序
 

系統預存程序是 SQL Server 提供來執行管理與其他工作,包括了系統資料表更新以及從系統資料表中檢索資料等。系統預存程序是和 SQL Server 一起安裝,名稱以 sp_ (系統預存程序) 或 xp_ (延伸的預存程序)開頭。這些預存程序儲存在 master 資料庫中,權限歸系統管理者所有。不過,許多程序可以從使用者自訂的資料庫執行,用來在特定資料庫中從系統資料表檢索資訊。當您執行一個系統預存程序,它是在目前資料庫的系統資料表中展開作業。


相關資訊

關於這類型程序的更多相關資訊,請參考《線上叢書》中 「延伸預存程序」 主題。


在 SQL Server 7 中新增了許多系統預存程序,如今在 SQL Server 2000 中同樣可以利用。表13-1列出了一些可能對您有所幫助的系統預存程序。

表13-1 Procedures Introduced....
系統預存程序 描述
sp_cycle_errorlog關閉目前的錯誤日誌檔案,重新命名為errorlog.1(以及,如果需要的話,將舊的errorlog.1重新命名為errorlog.2,依此類推),以及開始一個新的錯誤日誌檔案。
sp_helpfile傳回與目前資料庫相關之檔案的名稱與屬性。
sp_helpfilegroup傳回與目前資料庫相關之檔案群組的名稱與屬性。
sp_helprole傳回與目前資料庫相關中角色的資訊。
sp_help_alert報告伺服器定義的警示資訊。
sp_start_job指示SQL Server代理程式開始執行一個工作。

並不是只有這些預存程序提供立即的資訊,不過它們在使用您的使用者資料庫時會相當有用。例如,當執行 T-SQL 指令碼並將輸出結果儲存到一個檔案時,提供使用者資訊的程序就會相當有幫助。您可以將 sp_helpfile、sp_helpfilegroup以及 sp_helpdb 的執行結果儲存在特定的資料庫中,畢竟當您需要重建資料庫時有必要了解檔案、檔案群組、資料庫選項在起初建立時的原始設定。在 SQL Server 7.0 新增並保留 SQL Server 2000 中的系統預存程序清單,可以在《線上叢書》「Transact-SQL新增與加強的功能」這個主題裡找到。

系統資料表
 

系統資料表用來儲存 SQL Server 中所有資料庫的設定資訊,以及物件、使用者和使用者存取權限的定義。每個使用者資料庫有各自的系統資料表,其中保存資料庫的資訊。只有在 master 資料庫的系統資料表才握有伺服器層級的設定資訊。您應該利用系統預存程序來存取系統資料表而不是直接存取系統資料表。關於新的 SQL Server 7.0 新增的系統資料表清單可在《線上叢書》裡的「Transact-SQL新增與加強的功能」這個主題裡找到。底下列出一些有趣的新系統資料表:

  • backupfile這個資料表存放在 msdb 資料庫中。它記錄了所有記錄檔備份或資料庫檔案備份的相關資訊。這些資訊包括檔案識別碼、檔案歸屬的檔案群組,以及檔案存在的實體磁碟或資料分割的名稱。
     
  • restorehistory這個資料表存放在 msdb 資料庫中。它包含對應於各還原作業相關資訊的資料列,不論是檔案的還原或是資料庫的還原。這些資訊包括還原的日期與時間、目的資料庫、資料回復的時間點以及還原的類型。
     
  • sysfiles此資料表為一虛擬資料表,亦即無法直接更新或修改。它包含了每個資料庫檔案的相關資訊,諸如實體裝置及邏輯的檔案名稱、檔案大小及最大檔案大小以及資料庫增長大小(如果資料庫有所增長的話)。
     

    注意

    請永遠使用系統預存程序來存取系統資料表,系統預存程序提供一層隔離以確保您不會更動到不可更改的資料。如果您以手動方式存取系統資料表,可能會有變更重要系統資訊的風險。


    函數
     

    SQL Server 內建的函數提供了一個快速、簡單的方法來完成某些特定的工作。SQL Server 7.0 新增了幾個有用的函數,並且也包含在 SQL Server 2000 中。了解哪些函數是可用的,SQL Server 應用程式的設計工作可以變得稍為簡單。在《線上叢書》中的「Transact-SQL 新增與加強的功能」這個主題可以找到新增函數的完整清單。此處僅介紹一些對您可能很有幫助的函數:

  •  NEWID 建立一個 uniqueidentifier 資料型別的 全域唯一識別項 (GUID)。您需要使用這個函數將值分派給該資料型別的資料行,使用方式為 NEWID() 。(此函數不需引數)
     
  •  YEAR 傳回指定日期年份部分的完整整數。使用方式為 YEAR(date) 。例如:以下陳述式 SELECT YEAR('07/11/01') 將會傳回值 2001。
     
  •  MONTH 傳回指定日期月份部分的整數。使用方式為 MONTH(date) 。例如:以下陳述式 SELECT MONTH('07/11/01') 將會傳回值7。
     
  •  DAY 傳回指定日期日期部分的整數。使用方式為 DAY(date) 。例如:以下陳述式 SELECT DAY('07/11/01') 將會傳回值 11。
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值