SQL Server SQL指令碼


在前面的課程,我們使用“編輯前200行”選項新增資料到我們的資料庫表。在這一課中,我們將著眼於如何編寫SQL指令碼來更新並執行對資料庫進行查詢。

SQL指令碼可用於插入資料,讀取資料,更新資料,和刪除資料。它們也可以用於建立資料庫物件,如表,檢視,儲存過程,他們甚至可以用於建立整個資料庫本身 - 完整的表,資料,使用者,等等。

Transact-SQL

SQL Server支援的、Transact-SQL作為指令碼語言。 Transact-SQL是基於SQL(結構化查詢語言),它是用於應用程式和它們的資料庫之間的介面的程式設計語言。Transact-SQL是一個相對容易的語言學習,我強烈建議熟悉它。在這裡每當指SQL指令碼,意思就是一個Transact-SQL指令碼。

SQL語句

SQL指令碼通常由一個或多個“語句”。每個語句告訴SQL Server該怎麼做。

SQL指令碼可以包含許多語句。例如,SQL指令碼可以包含一個語句建立一個表,另一份宣告將資料插入到該錶,而另一份語句中,以選擇所有剛剛插入到表中的資料。事實上,SQL有一個用於那些確切的三項具體語句:CREATE語句,INSERT語句和SELECT語句。

一般來說,語句開始使用想要執行的任務的指令。如果你想建立一個資料庫物件時,宣告開始後建立。我說:“一般來說”,因為,還有一些其他的點點滴滴,你可以在丟擲一個SQL語句可能會及所希望的語句。

SQL語句範例

也許最簡單的SQL語句是學習SELECT語句。下面是在其最簡單的SELECT語句的一個例子:

?
SELECT * FROM Tasks

上面的語句從任務表中的選擇所有列。星號(*)的意思是“所有列”。上面的語句可以略作修改,只返回一個特定的列,我們可以新增一個WHERE子句來過濾資料,只有那些我們感興趣的記錄:

?
SELECT TaskName FROM Tasks
WHERE StatusId = "3"

上述語句選擇從任務表中的TaskName列,但它只返回那些具有StatusId為3的記錄。值為3可能是“To Do”或“Done”,或不管它是什麼,我們只希望它表示具體的意思。在我們的TaskTracker資料庫中,我們將建立一個新的表稱為Status,我們將指定“3”是指什麼(“1”和“2”又表示什麼)。這些數位只是在StatusId欄位中(我們指定為標識列 - 一個自動編號)的值。每個這些數位將在StatusName欄位相應值將告訴我們實際上是什麼狀態。

然後,一旦我們已經建立了狀態表中,我們可以修改上面的SQL語句,以包括狀態表,以便我們可以編寫為WHERE StatusName=“To Do”,而不是試圖記住“To Do”數位是什麼。

但是,我們需要首先建立我們的Status表... 

使用SQL指令碼建立表

下面是一個SQL指令碼,將在我們的資料庫中另一個表- 一個名為Status表。如果不熟悉SQL它可能看起來有點怪異。 當看到列及其相應的資料型別的名稱是什麼,那麼也就對它有一些了解。在此指令碼中,我們並不容許任何NULL欄位(因此NOT NULL毗鄰每一列)。我們也建立了主鍵StatusId欄位,我們設定的預設值的dateCreated欄位,使用(getdate())。

要執行此指令碼,請執行以下操作:

  1. 指令碼複製到剪貼簿
  2. 在SQL Server管理套件,單擊工具列上的新建查詢按鈕:
  3. 指令碼貼上到查詢視窗
  4. 點選!執行該工具列上的按鈕:

一旦指令碼執行,你應該看到一條訊息,讀取命令已成功完成。

Screenshot of the New Query button

這裡是指令碼:

?
CREATE TABLE Status(
	StatusId int IDENTITY(1,1) NOT NULL,
	StatusName varchar(50) NOT NULL,
	DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated  DEFAULT (getdate()),
	CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId)
)

鍵盤快捷鍵

註:也可以通過按F5鍵盤上執行一個查詢。

另外,你甚至可以通過選擇要執行的部分,然後按F5執行查詢的一部分。這非常上包含大量的SQL語句的較大的指令碼,但是,當由於某種原因,只要執行的一個或兩個(或甚至執行所有這些,但只是一次一個)。

通過SQL指令碼新增資料

也可以通過SQL指令碼新增資料。該指令碼將使用INSERT語句將資料插入到指定的表。 你可以使用指令碼插入資料到所有列在表中,或者只是那些指定的表。

下面的指令碼將資料插入狀態表,然後選擇該資料(所以我們可以看到,它進入了)。執行此指令碼,你做了上述指令碼)以同樣的方式:

?
INSERT INTO Status (StatusName) VALUES ('To Do');
INSERT INTO Status (StatusName) VALUES ('In Progress');
INSERT INTO Status (StatusName) VALUES ('Done');

SELECT * FROM Status

這裡是這個樣子的:

Screenshot SQL query results

正如你所看到的,查詢的結果顯示在底部窗格中。

交叉參考資料

現在,我們已經得到了Status表,讓我們一值新增到任務表的StatusId欄位中(還記得我們保留那個欄位為空的所有記錄,因為我們還沒有Status表)。

所以我們增加值要任務表連結到Status表。 在任務表中的每個記錄現在將有一個StatusId,它的值可能是1,2或3(在狀態表的StatusId欄位中匹配的值)。

要做到這一點,我們需要使用UPDATE語句(因為我們正在更新記錄,而不是插入新的)。

因此,事不宜遲,讓我們執行下面的指令碼:

?
UPDATE Tasks
SET StatusId='1'
WHERE TaskId='1';

UPDATE Tasks
SET StatusId='1'
WHERE TaskId='2';

UPDATE Tasks
SET StatusId='2'
WHERE TaskId='3';

UPDATE Tasks
SET StatusId='3'
WHERE TaskId='4';

UPDATE Tasks
SET StatusId='3'
WHERE TaskId='5';

UPDATE Tasks
SET StatusId='2'
WHERE TaskId='6';

UPDATE Tasks
SET StatusId='1'
WHERE TaskId='7';

SELECT * FROM Tasks

現在應該看到其StatusId欄位中填寫的所有記錄您的任務表,完整。應該是這樣的:

Screenshot SQL query results

合併指令碼

事實上,我們可能只是很容易地結合上述所有指令碼並執行它們為一體。我只保留了它們,才能分離出來,使其更易於了解哪些部分做什麼。

如果您想了解更多關於建立SQL語句,請看看SQL教學

區分大小寫

SQL不區分大小寫。所以下面的語句都是執行同樣的事情:

  • SELECT * FROM TASKS
  • SELECT * FROM Tasks
  • Select * From Tasks
  • select * from tasks

資料庫管理

大多數的資料庫管理任務(如建立使用者,備份等),可以在SSMS通過圖形化使用者介面進行程式設計,可以通過SQL指令碼來執行。本教學集中使用的圖形化使用者介面,主要是因為它通常是一個更容易為新使用者得到一個簡單的入門。 當你更熟悉SQL Server,就可以使用SQL指令碼來執行許多工,也可通過圖形化使用者介面做自己的事情。

接下來,我們看一下查詢設計