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())。
要運行此腳本,請執行以下操作:
- 腳本複製到剪貼板
- 在SQL Server管理套件,單擊工具欄上的新建查詢按鈕:
- 腳本粘貼到查詢窗口
- 點擊!執行該工具欄上的按鈕:
一旦腳本運行,你應該看到一條消息,讀取命令已成功完成。
這裏是腳本:
✂
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
這裏是這個樣子的:
正如你所看到的,查詢的結果顯示在底部窗格中。
交叉參考數據
現在,我們已經得到了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字段中填寫的所有記錄您的任務表,完整。應該是這樣的:
合併腳本
事實上,我們可能只是很容易地結合上述所有腳本並運行它們爲一體。我只保留了它們,才能分離出來,使其更易於瞭解哪些部分做什麼。
如果您想了解更多關於創建SQL語句,請看看SQL教程。
區分大小寫
SQL不區分大小寫。所以下面的語句都是執行同樣的事情:
-
SELECT * FROM TASKS
-
SELECT * FROM Tasks
-
Select * From Tasks
-
select * from tasks
數據庫管理
大多數的數據庫管理任務(如創建用戶,備份等),可以在SSMS通過圖形用戶界面進行編程,可以通過SQL腳本來執行。本教程集中使用的圖形用戶界面,主要是因爲它通常是一個更容易爲新用戶得到一個簡單的入門。 當你更熟悉SQL Server,就可以使用SQL腳本來執行許多任務,也可通過圖形用戶界面做自己的事情。
接下來,我們看一下查詢設計。