在前面的課程,我們使用“編輯前200行”選項(xiàng)添加數(shù)據(jù)到我們的數(shù)據(jù)庫(kù)表。在這一課中,我們將著眼于如何編寫(xiě)SQL腳本來(lái)更新并運(yùn)行對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)。
SQL腳本可用于插入數(shù)據(jù),讀取數(shù)據(jù),更新數(shù)據(jù),和刪除數(shù)據(jù)。它們也可以用于創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,如表,視圖,存儲(chǔ)過(guò)程,他們甚至可以用于創(chuàng)建整個(gè)數(shù)據(jù)庫(kù)本身 - 完整的表,數(shù)據(jù),用戶(hù),等等。
SQL Server支持的、Transact-SQL作為腳本語(yǔ)言。 Transact-SQL是基于SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言),它是用于應(yīng)用程序和它們的數(shù)據(jù)庫(kù)之間的接口的編程語(yǔ)言。Transact-SQL是一個(gè)相對(duì)容易的語(yǔ)言學(xué)習(xí),我強(qiáng)烈建議熟悉它。在這里每當(dāng)指SQL腳本,意思就是一個(gè)Transact-SQL腳本。
SQL腳本通常由一個(gè)或多個(gè)“語(yǔ)句”。每個(gè)語(yǔ)句告訴SQL Server該怎么做。
SQL腳本可以包含許多語(yǔ)句。例如,SQL腳本可以包含一個(gè)語(yǔ)句創(chuàng)建一個(gè)表,另一份聲明將數(shù)據(jù)插入到該表,而另一份語(yǔ)句中,以選擇所有剛剛插入到表中的數(shù)據(jù)。事實(shí)上,SQL有一個(gè)用于那些確切的三項(xiàng)具體語(yǔ)句:CREATE語(yǔ)句,INSERT語(yǔ)句和SELECT語(yǔ)句。
一般來(lái)說(shuō),語(yǔ)句開(kāi)始使用想要執(zhí)行的任務(wù)的指令。如果你想創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)象時(shí),聲明開(kāi)始后創(chuàng)建。我說(shuō):“一般來(lái)說(shuō)”,因?yàn)?,還有一些其他的點(diǎn)點(diǎn)滴滴,你可以在拋出一個(gè)SQL語(yǔ)句可能會(huì)及所希望的語(yǔ)句。
也許最簡(jiǎn)單的SQL語(yǔ)句是學(xué)習(xí)SELECT語(yǔ)句。下面是在其最簡(jiǎn)單的SELECT語(yǔ)句的一個(gè)例子:
SELECT * FROM Tasks
上面的語(yǔ)句從任務(wù)表中的選擇所有列。星號(hào)(*)的意思是“所有列”。上面的語(yǔ)句可以略作修改,只返回一個(gè)特定的列,我們可以添加一個(gè)WHERE子句來(lái)過(guò)濾數(shù)據(jù),只有那些我們感興趣的記錄:
SELECT TaskName FROM Tasks WHERE StatusId = "3"
上述語(yǔ)句選擇從任務(wù)表中的TaskName列,但它只返回那些具有StatusId為3的記錄。值為3可能是“To Do”或“Done”,或不管它是什么,我們只希望它表示具體的意思。在我們的TaskTracker數(shù)據(jù)庫(kù)中,我們將創(chuàng)建一個(gè)新的表稱(chēng)為Status,我們將指定“3”是指什么(“1”和“2”又表示什么)。這些數(shù)字只是在StatusId字段中(我們指定為標(biāo)識(shí)列 - 一個(gè)自動(dòng)編號(hào))的值。每個(gè)這些數(shù)字將在StatusName字段相應(yīng)值將告訴我們實(shí)際上是什么狀態(tài)。
然后,一旦我們已經(jīng)創(chuàng)建了狀態(tài)表中,我們可以修改上面的SQL語(yǔ)句,以包括狀態(tài)表,以便我們可以編寫(xiě)為WHERE StatusName=“To Do”,而不是試圖記住“To Do”數(shù)字是什么。
但是,我們需要首先創(chuàng)建我們的Status表...
下面是一個(gè)SQL腳本,將在我們的數(shù)據(jù)庫(kù)中另一個(gè)表- 一個(gè)名為Status表。如果不熟悉SQL它可能看起來(lái)有點(diǎn)怪異。 當(dāng)看到列及其相應(yīng)的數(shù)據(jù)類(lèi)型的名稱(chēng)是什么,那么也就對(duì)它有一些了解。在此腳本中,我們并不容許任何NULL字段(因此NOT NULL毗鄰每一列)。我們也創(chuàng)建了主鍵StatusId字段,我們?cè)O(shè)定的默認(rèn)值的dateCreated字段,使用(getdate())。
要運(yùn)行此腳本,請(qǐng)執(zhí)行以下操作:
一旦腳本運(yùn)行,你應(yīng)該看到一條消息,讀取命令已成功完成。
這里是腳本:
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) )
注:也可以通過(guò)按F5鍵盤(pán)上運(yùn)行一個(gè)查詢(xún)。
另外,你甚至可以通過(guò)選擇要運(yùn)行的部分,然后按F5運(yùn)行查詢(xún)的一部分。這非常上包含大量的SQL語(yǔ)句的較大的腳本,但是,當(dāng)由于某種原因,只要運(yùn)行的一個(gè)或兩個(gè)(或甚至運(yùn)行所有這些,但只是一次一個(gè))。
也可以通過(guò)SQL腳本添加數(shù)據(jù)。該腳本將使用INSERT語(yǔ)句將數(shù)據(jù)插入到指定的表。 你可以使用腳本插入數(shù)據(jù)到所有列在表中,或者只是那些指定的表。
下面的腳本將數(shù)據(jù)插入狀態(tài)表,然后選擇該數(shù)據(jù)(所以我們可以看到,它進(jìn)入了)。運(yùn)行此腳本,你做了上述腳本)以同樣的方式:
INSERT INTO Status (StatusName) VALUES ('To Do'); INSERT INTO Status (StatusName) VALUES ('In Progress'); INSERT INTO Status (StatusName) VALUES ('Done'); SELECT * FROM Status
這里是這個(gè)樣子的:
正如你所看到的,查詢(xún)的結(jié)果顯示在底部窗格中。
現(xiàn)在,我們已經(jīng)得到了Status表,讓我們一值添加到任務(wù)表的StatusId字段中(還記得我們保留那個(gè)字段為空的所有記錄,因?yàn)槲覀冞€沒(méi)有Status表)。
所以我們?cè)黾又狄蝿?wù)表鏈接到Status表。 在任務(wù)表中的每個(gè)記錄現(xiàn)在將有一個(gè)StatusId,它的值可能是1,2或3(在狀態(tài)表的StatusId字段中匹配的值)。
要做到這一點(diǎn),我們需要使用UPDATE語(yǔ)句(因?yàn)槲覀冋诟掠涗?,而不是插入新的)?/p>
因此,事不宜遲,讓我們運(yùn)行下面的腳本:
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
現(xiàn)在應(yīng)該看到其StatusId字段中填寫(xiě)的所有記錄您的任務(wù)表,完整。應(yīng)該是這樣的:
事實(shí)上,我們可能只是很容易地結(jié)合上述所有腳本并運(yùn)行它們?yōu)橐惑w。我只保留了它們,才能分離出來(lái),使其更易于了解哪些部分做什么。
如果您想了解更多關(guān)于創(chuàng)建SQL語(yǔ)句,請(qǐng)看看SQL教程。
SQL不區(qū)分大小寫(xiě)。所以下面的語(yǔ)句都是執(zhí)行同樣的事情:
SELECT * FROM TASKSSELECT * FROM TasksSelect * From Tasksselect * from tasks大多數(shù)的數(shù)據(jù)庫(kù)管理任務(wù)(如創(chuàng)建用戶(hù),備份等),可以在SSMS通過(guò)圖形用戶(hù)界面進(jìn)行編程,可以通過(guò)SQL腳本來(lái)執(zhí)行。本教程集中使用的圖形用戶(hù)界面,主要是因?yàn)樗ǔJ且粋€(gè)更容易為新用戶(hù)得到一個(gè)簡(jiǎn)單的入門(mén)。 當(dāng)你更熟悉SQL Server,就可以使用SQL腳本來(lái)執(zhí)行許多任務(wù),也可通過(guò)圖形用戶(hù)界面做自己的事情。
接下來(lái),我們看一下查詢(xún)?cè)O(shè)計(jì)。