SQL(STructured Query Language)是一種資料庫(kù)查詢(xún)和程式設(shè)計(jì)語(yǔ)言,用於存取資料以及查詢(xún)、更新和管理關(guān)聯(lián)式資料庫(kù)系統(tǒng)。美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)與國(guó)際標(biāo)準(zhǔn)化組織(ISO)已經(jīng)制定了 SQL 標(biāo)準(zhǔn)。ANSI 是一個(gè)美國(guó)工業(yè)和商業(yè)集團(tuán)組織,發(fā)展美國(guó)的商務(wù)和通訊標(biāo)準(zhǔn)。ANSI 同時(shí)也是 ISO 和 International Electrotechnical Commission(IEC)的成員之一。ANSI 發(fā)布與國(guó)際標(biāo)準(zhǔn)組織相應(yīng)的美國(guó)標(biāo)準(zhǔn)。1992年,ISO 和 IEC 發(fā)布了 SQL 的國(guó)際標(biāo)準(zhǔn),稱(chēng)為 SQL-92。ANSI 隨之發(fā)布的相應(yīng)標(biāo)準(zhǔn)是 ANSI SQL-92。ANSI SQL-92 有時(shí)被稱(chēng)為 ANSI SQL。盡管不同的關(guān)聯(lián)式資料庫(kù)使用的 SQL 版本有一些差異,但大多數(shù)都遵循 ANSI SQL 標(biāo)準(zhǔn)。SQL Server 使用 ANSI SQL-92 的擴(kuò)展集,稱(chēng)為 T-SQL,其遵循 ANSI 制定的 SQL-92 標(biāo)準(zhǔn)。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)忻府免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
SQL 語(yǔ)言包括兩種主要程式設(shè)計(jì)語(yǔ)言類(lèi)別的陳述式: 資料定義語(yǔ)言 (DDL)與資料操作語(yǔ)言 (DML)。下面我們將介紹這兩類(lèi)語(yǔ)言。
DDL
DDL 用於定義和管理物件,例如資料庫(kù)、資料表以及檢視表( 第18章 將會(huì)解釋何謂檢視表)。DDL 陳述式通常包括每個(gè)物件的CREATE、ALTER 以及 DROP 命令。舉例來(lái)說(shuō),CREATE TABLE、ALTER TABLE 以及 DROP TABLE 這些陳述式便可以用來(lái)建立新資料表、修改其屬性(如新增或刪除資料行)、刪除資料表等,下面我們會(huì)一一介紹。
CREATE TABLE 陳述式
使用 DDL 在 MyDB 資料庫(kù)建立一個(gè)名為 Customer_Data 的范例資料表,本章后面的例子我們會(huì)使用到這個(gè)資料表。如前所述,CREATE TABLE 陳述式可以用來(lái)建立資料表。這個(gè)范例資料表被定義成四個(gè)資料行,如下所示:
Use MyDB
CREATE TABLE Customer_Data
(customer_id smallint,
first_name char(20),
last_name char(20),
phone char(10))
GO
這個(gè)陳述式能產(chǎn)生 Customer_Data 資料表,這個(gè)資料表會(huì)一直是空的直到資料被填入資料表內(nèi)。
ALTER TABLE 陳述式
ALTER TABLE 陳述式用來(lái)變更資料表的定義與屬性。在下面的例子中,我們利用 ALTER TABLE 在已經(jīng)存在的 Customer_Data 資料表中新增 middle_initial 資料行。
ALTER TABLE Customer_Data
ADD middle_initial char(1)
GO
現(xiàn)在資料表的定義包括了五個(gè)資料行,而不是之前的四個(gè)資料行。關(guān)於使用ALTER TABLE 的更多細(xì)節(jié),請(qǐng)參閱 第15章 。
DROP TABLE 陳述式
DROP TABLE 陳述式用來(lái)刪除資料表定義以及所有的資料、索引、觸發(fā)程序、條件約束以及資料表的權(quán)限。要?jiǎng)h除我們的 Customer_Data 資料表,可利用下列命令:
DROP TABLE Customer_Data
GO
關(guān)於 DROP TABLE 陳述式的詳細(xì)內(nèi)容,請(qǐng)參閱 第15章 。
DML
DML 利用 INSERT、SELECT、UPDATE 及 DELETE 等陳述式來(lái)操作資料庫(kù)物件所包含的資料。
INSERT 陳述式
INSERT 陳述式用來(lái)在資料表或檢視表中插入一列資料。例如,如果要在Customer_Data 資料表中新增一個(gè)客戶(hù),可使用類(lèi)似以下的 INSERT 陳述式:
INSERT INTO Customer_Data
(customer_id, first_name, last_name, phone)
VALUES (777, "Frankie", "Stein", "4895873900")
請(qǐng)注意 SQL 陳述式中第二行的資料行名稱(chēng)清單,清單上資料行名稱(chēng)的次序決定了資料數(shù)值將被放在哪個(gè)資料行。舉例來(lái)說(shuō),第一個(gè)資料數(shù)值將被放在清單列出的第一個(gè)資料行 customer_id、第二個(gè)資料數(shù)值放在第二個(gè)資料行,依此類(lèi)推。由於我們?cè)诮①Y料表時(shí),定義資料資料行填入數(shù)值的次序與現(xiàn)在相同,因此我們不必特意指定欄位名稱(chēng)。我們可以用以下的 INSERT 陳述式代替:
INSERT INTO Customer_Data
VALUES (777, "Frankie", "Stein", "4895873900")
注意
如果使用這種形式的 INSERT 陳述式,但被插入的數(shù)值次序上與建立資料表時(shí)不同,數(shù)值將被放入錯(cuò)誤的資料行。如果資料的型別與定義不符,則會(huì)收到一個(gè)錯(cuò)誤訊息。
--------------------------------------------------------------------------------
SELECT 陳述式
SELECT 陳述式用來(lái)檢索資料表中的資料,而哪些資料被檢索由列出的資料行與陳述式中的 WHERE 子句決定。例如,要從之前建立的 Customer_Data 資料表中檢索 customer_id 以及 first_name 資料行的資料,并且只想取出每列中 first_name 資料行值為 Frankie 的資料,那麼可以利用以下的 SELECT 陳述式:
SELECT customer_id, first_name FROM Customer_Data
WHERE first_name = "Frankie"
如果有一列符合 SELECT 陳述式中的標(biāo)準(zhǔn),則結(jié)果將顯示如下:
customer_id first_name
------------- ------------
777 Frankie
UPDATE 陳述式
UPDATE 陳述式用來(lái)更新或改變一列或多列中的值。例如,一位名稱(chēng)為 Frankie Stein 的客戶(hù)想要在記錄中改變他的姓氏為 Franklin,可使用以下 UPDATE 陳述式:
UPDATE Customer_Data
SET first_name = "Franklin"
WHERE last_name = "Stein" and customer_id= 777
我們?cè)?WHERE 子句中加入 customer_id 的項(xiàng)目來(lái)確定其他名稱(chēng)為 Stein 的客戶(hù)不會(huì)被影響-只有customer_id為777的客戶(hù),姓氏會(huì)有所改變。
--------------------------------------------------------------------------------
說(shuō)明
當(dāng)您使用 UPDATE 陳述式時(shí),要確定在 WHERE 子句提供充份的篩選條件,如此才不會(huì)不經(jīng)意地改變了一些不該改變的資料。
--------------------------------------------------------------------------------
DELETE 陳述式
DELETE 陳述式用來(lái)刪除資料表中一列或多列的資料,您也可以刪除資料表中的所有資料列。要從 Customer_Data 資料表中刪除所有的列,您可以利用下列陳述式:
DELETE FROM Customer_Data
或
DELETE Customer_Data
資料表名稱(chēng)前的 FROM 關(guān)鍵字在 DELETE 陳述式中是選擇性的。除此之外,這兩個(gè)陳述式完全相同。
要從 Customer_Data 資料表中刪除 customer_id 資料行的值小於100的列,可利用下列陳述式:
DELETE FROM Customer_Data
WHERE customer_id 100
現(xiàn)在我們已經(jīng)快速瀏覽了 SQL 提供的 DDL 與 DML 陳述式,接著,下面將介紹 T-SQL。
SQL中的五種數(shù)據(jù)類(lèi)型
簡(jiǎn)要描述一下SQL中的五種數(shù)據(jù)類(lèi)型:字符型,文本型,數(shù)值型,邏輯型和日期型
字符型
VARCHAR VS CHAR
VARCHAR型和CHAR型數(shù)據(jù)的這個(gè)差別是細(xì)微的,但是非常重要。他們都是用來(lái)儲(chǔ)存字符串長(zhǎng)度小于255的字符。
假如你向一個(gè)長(zhǎng)度為四十個(gè)字符的VARCHAR型字段中輸入數(shù)據(jù)BIll GAtES。當(dāng)你以后從這個(gè)字段中取出此數(shù)據(jù)時(shí),你取出的數(shù)據(jù)其長(zhǎng)度為十個(gè)字符——字符串Bill Gates的長(zhǎng)度。 現(xiàn)在假如你把字符串輸入一個(gè)長(zhǎng)度為四十個(gè)字符的CHAR型字段中,那么當(dāng)你取出數(shù)據(jù)時(shí),所取出的數(shù)據(jù)長(zhǎng)度將是四十個(gè)字符。字符串的后面會(huì)被附加多余的空格。
當(dāng)你建立自己的站點(diǎn)時(shí),你會(huì)發(fā)現(xiàn)使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段時(shí),你不需要為剪掉你數(shù)據(jù)中多余的空格而操心。
VARCHAR型字段的另一個(gè)突出的好處是它可以比CHAR型字段占用更少的內(nèi)存和硬盤(pán)空間。當(dāng)你的數(shù)據(jù)庫(kù)很大時(shí),這種內(nèi)存和磁盤(pán)空間的節(jié)省會(huì)變得非常重要
文本型
TEXT
使用文本型數(shù)據(jù),你可以存放超過(guò)二十億個(gè)字符的字符串。當(dāng)你需要存儲(chǔ)大串的字符時(shí),應(yīng)該使用文本型數(shù)據(jù)。
注意文本型數(shù)據(jù)沒(méi)有長(zhǎng)度,而上一節(jié)中所講的字符型數(shù)據(jù)是有長(zhǎng)度的。一個(gè)文本型字段中的數(shù)據(jù)通常要么為空,要么很大。
當(dāng)你從HTML fORM的多行文本編輯框(TEXTAREA)中收集數(shù)據(jù)時(shí),你應(yīng)該把收集的信息存儲(chǔ)于文本型字段中。但是,無(wú)論何時(shí),只要你能避免使用文本型字段,你就應(yīng)該不適用它。文本型字段既大且慢,濫用文本型字段會(huì)使服務(wù)器速度變慢。文本型字段還會(huì)吃掉大量的磁盤(pán)空間。
一旦你向文本型字段中輸入了任何數(shù)據(jù)(甚至是空值),就會(huì)有2K的空間被自動(dòng)分配給該數(shù)據(jù)。除非刪除該記錄,否則你無(wú)法收回這部分存儲(chǔ)空間。
數(shù)值型
SQL支持許多種不同的數(shù)值型數(shù)據(jù)。你可以存儲(chǔ)整數(shù) INT 、小數(shù) NUMERIC、和錢(qián)數(shù) MONEY。
INT VS SMALLINT VS TINYINT
他們的區(qū)別只是字符長(zhǎng)度:
INT型數(shù)據(jù)的表數(shù)范圍是從-2,147,483,647到2,147,483,647的整數(shù)
SMALLINT 型數(shù)據(jù)可以存儲(chǔ)從-32768到32768的整數(shù)
TINYINT 型的字段只能存儲(chǔ)從0到255的整數(shù),不能用來(lái)儲(chǔ)存負(fù)數(shù)
通常,為了節(jié)省空間,應(yīng)該盡可能的使用最小的整型數(shù)據(jù)。一個(gè)TINYINT型數(shù)據(jù)只占用一個(gè)字節(jié);一個(gè)INT型數(shù)據(jù)占用四個(gè)字節(jié)。這看起來(lái)似乎差別不大,但是在比較大的表中,字節(jié)數(shù)的增長(zhǎng)是很快的。另一方面,一旦你已經(jīng)創(chuàng)建了一個(gè)字段,要修改它是很困難的。因此,為安全起見(jiàn),你應(yīng)該預(yù)測(cè)以下,一個(gè)字段所需要存儲(chǔ)的數(shù)值最大有可能是多大,然后選擇適當(dāng)?shù)臄?shù)據(jù)類(lèi)型。
MUNERIC
為了能對(duì)字段所存放的數(shù)據(jù)有更多的控制,你可以使用NUMERIC型數(shù)據(jù)來(lái)同時(shí)表示一個(gè)數(shù)的整數(shù)部分和小數(shù)部分。NUMERIC型數(shù)據(jù)使你能表示非常大的數(shù)——比INT型數(shù)據(jù)要大得多。一個(gè)NUMERIC型字段可以存儲(chǔ)從-1038到1038范圍內(nèi)的數(shù)。NUMERIC型數(shù)據(jù)還使你能表示有小數(shù)部分的數(shù)。例如,你可以在NUMERIC型字段中存儲(chǔ)小數(shù)3.14。
當(dāng)定義一個(gè)NUMERIC型字段時(shí),你需要同時(shí)指定整數(shù)部分的大小和小數(shù)部分的大小。如:MUNERIC(23,0)
一個(gè) NUMERIC型數(shù)據(jù)的整數(shù)部分最大只能有28位,小數(shù)部分的位數(shù)必須小于或等于整數(shù)部分的位數(shù),小數(shù)部分可以是零。
MONEY VS SMALLMONEY
你可以使用 INT型或NUMERIC型數(shù)據(jù)來(lái)存儲(chǔ)錢(qián)數(shù)。但是,專(zhuān)門(mén)有另外兩種數(shù)據(jù)類(lèi)型用于此目的。如果你希望你的網(wǎng)點(diǎn)能掙很多錢(qián),你可以使用MONEY型數(shù)據(jù)。如果你的野心不大,你可以使用SMALLMONEY型數(shù)據(jù)。MONEY型數(shù)據(jù)可以存儲(chǔ)從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢(qián)數(shù)。如果你需要存儲(chǔ)比這還大的金額,你可以使用NUMERIC型數(shù)據(jù)。
SMALLMONEY型數(shù)據(jù)只能存儲(chǔ)從-214,748.3648到214,748.3647 的錢(qián)數(shù)。同樣,如果可以的話,你應(yīng)該用SMALLMONEY型來(lái)代替MONEY型數(shù)據(jù),以節(jié)省空間。
邏輯型
BIT
如果你使用復(fù)選框( CHECKBOX)從網(wǎng)頁(yè)中搜集信息,你可以把此信息存儲(chǔ)在BIT型字段中。BIT型字段只能取兩個(gè)值:0或1。
當(dāng)心,在你創(chuàng)建好一個(gè)表之后,你不能向表中添加 BIT型字段。如果你打算在一個(gè)表中包含BIT型字段,你必須在創(chuàng)建表時(shí)完成。
日期型
DATETIME VS SMALLDATETIME
一個(gè) DATETIME型的字段可以存儲(chǔ)的日期范圍是從1753年1月1日第一毫秒到9999年12月31日最后一毫秒。
如果你不需要覆蓋這么大范圍的日期和時(shí)間,你可以使用SMALLDATETIME型數(shù)據(jù)。它與DATETIME型數(shù)據(jù)同樣使用,只不過(guò)它能表示的日期和時(shí)間范圍比DATETIME型數(shù)據(jù)小,而且不如DATETIME型數(shù)據(jù)精確。一個(gè)SMALLDATETIME型的字段能夠存儲(chǔ)從1900年1月1日到2079年6月6日的日期,它只能精確到秒。
DATETIME型字段在你輸入日期和時(shí)間之前并不包含實(shí)際的數(shù)據(jù),認(rèn)識(shí)這一點(diǎn)是重要的。
這個(gè)似乎不是那么容易解答的,首先你要把數(shù)據(jù)從mongodb查出來(lái),你要確保已經(jīng)安裝了go語(yǔ)言的mongodb驅(qū)動(dòng)。然后對(duì)查出來(lái)的數(shù)據(jù)進(jìn)行解析,查出來(lái)的數(shù)據(jù)是類(lèi)似json的數(shù)據(jù),這個(gè)解析代碼需要相關(guān)的庫(kù)或者你自己寫(xiě)的。然后再把數(shù)據(jù)相應(yīng)的插入mysql里,這里你也要安裝go語(yǔ)言的mysql驅(qū)動(dòng)和odbc
go-mysql-server是一個(gè)SQL引擎,能解析標(biāo)準(zhǔn)SQL(基于MySQL語(yǔ)法)并優(yōu)化查詢(xún)。它提供了簡(jiǎn)單的接口,允許自定義表格數(shù)據(jù)源實(shí)現(xiàn)。提供與MySQL協(xié)議兼容的服務(wù)器實(shí)現(xiàn)。這意味著它與MySQLODBC,JDBC或默認(rèn)的MySQL客戶(hù)端shell接口兼容。
如果寫(xiě)壓力進(jìn)一步擴(kuò)大,并且數(shù)據(jù)量急劇快速增長(zhǎng),DB寫(xiě)節(jié)點(diǎn)即主庫(kù)就會(huì)成為整個(gè)系統(tǒng)的瓶頸。在MySQL的日常運(yùn)營(yíng)中,如果DB中表和表之間的數(shù)據(jù)很多是沒(méi)有關(guān)系的,或者根本不需要表關(guān)聯(lián)Join操作,我們可以考慮按照業(yè)務(wù)把不同的數(shù)據(jù)放到不同的服務(wù)器中,即垂直分庫(kù)或叫垂直切分。
不過(guò)需要注意的是,垂直分庫(kù)無(wú)法解決單表數(shù)據(jù)量過(guò)大的問(wèn)題,由于單一業(yè)務(wù)的數(shù)據(jù)信息仍然落盤(pán)在單表中,如果單表數(shù)據(jù)量太大,就會(huì)極大地影響SQL執(zhí)行的性能。由此,在MySQL應(yīng)用領(lǐng)域,水平分表也是互聯(lián)網(wǎng)場(chǎng)景應(yīng)對(duì)高并發(fā)、單表數(shù)據(jù)量過(guò)大的解決方案之一。分表在本質(zhì)上可以概括為業(yè)務(wù)表在邏輯上公用一個(gè)路由結(jié)構(gòu),物理上分散存儲(chǔ)。這就是常說(shuō)的Sharding分片或者分區(qū)。
結(jié)束,終止上面語(yǔ)句
詳細(xì)解釋如下
GO
用信號(hào)通知 Microsoft? SQL Server? 實(shí)用工具一批 Transact-SQL 語(yǔ)句的結(jié)束。
語(yǔ)法
GO
注釋
GO 不是 Transact-SQL 語(yǔ)句;而是可為 osql 和 isql 實(shí)用工具及 SQL Server 查詢(xún)分析器識(shí)別的命令。
SQL Server 實(shí)用工具將 GO 解釋為應(yīng)將當(dāng)前的 Transact-SQL 批處理語(yǔ)句發(fā)送給 SQL Server 的信號(hào)。當(dāng)前批處理語(yǔ)句是自上一 GO 命令后輸入的所有語(yǔ)句,若是第一條 GO 命令,則是從特殊會(huì)話或腳本的開(kāi)始處到這條 GO 命令之間的所有語(yǔ)句。SQL 查詢(xún)分析器和 osql 及 isql 命令提示實(shí)用工具執(zhí)行 GO 命令的方式不同。有關(guān)更多信息,請(qǐng)參見(jiàn) osql 實(shí)用工具、isql 實(shí)用工具和 SQL 查詢(xún)分析器。
GO 命令和Transact-SQL 語(yǔ)句不可在同一行上。但在 GO 命令行中可包含注釋。
用戶(hù)必須遵照使用批處理的規(guī)則。例如,在批處理中的第一條語(yǔ)句后執(zhí)行任何存儲(chǔ)過(guò)程必須包含 EXECUTE 關(guān)鍵字。局部(用戶(hù)定義)變量的作用域限制在一個(gè)批處理中,不可在 GO 命令后引用。
USE pubs
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.
-- Yields an error because @MyMsg not declared in this batch.
PRINT @MyMsg
GO
SELECT @@VERSION;
-- Yields an error: Must be EXEC sp_who if not first statement in
-- batch.
sp_who
GO
SQL Server 應(yīng)用程序可將多條 Transact-SQL 語(yǔ)句作為一個(gè)批處理發(fā)給 SQL Server 去執(zhí)行。在此批處理中的語(yǔ)句編譯成一個(gè)執(zhí)行計(jì)劃。程序員在 SQL Server 實(shí)用工具中執(zhí)行特定語(yǔ)句,或生成 Transact-SQL 語(yǔ)句腳本在 SQL Server 實(shí)用工具中運(yùn)行,用 GO 來(lái)標(biāo)識(shí)批處理的結(jié)束。
如果基于 DB-Library、ODBC 或 OLE DB APIs 的應(yīng)用程序試圖執(zhí)行 GO 命令時(shí)會(huì)收到語(yǔ)法錯(cuò)誤。SQL Server 實(shí)用工具永遠(yuǎn)不會(huì)向服務(wù)器發(fā)送 GO 命令。
權(quán)限
GO 是一個(gè)不需權(quán)限的實(shí)用工具命令。可以由任何用戶(hù)執(zhí)行。
示例
下面的示例創(chuàng)建兩個(gè)批處理。第一個(gè)批處理只包含一條 USE pubs 語(yǔ)句,用于設(shè)置數(shù)據(jù)庫(kù)上下文。剩下的語(yǔ)句使用了一個(gè)局部變量,因此所有的局部變量聲明必須在一個(gè)批處理中。這一點(diǎn)可通過(guò)在最后一條引用此變量的語(yǔ)句之后才使用 GO 命令來(lái)做到。
USE pubs
GO
DECLARE @NmbrAuthors int
SELECT @NmbrAuthors = COUNT(*)
FROM authors
PRINT 'The number of authors as of ' +
CAST(GETDATE() AS char(20)) + ' is ' +
CAST(@NmbrAuthors AS char (10))
尚未發(fā)現(xiàn)有庫(kù)直接支持讀取xls, 但是有庫(kù)直接支持xlsx,例如:
建議:
轉(zhuǎn)換為xlsx進(jìn)行處理
或者是?, 通過(guò)ODBC設(shè)置訪問(wèn)xls
GO 0202 用信號(hào)通知 02 Microsoftreg; 02 SQL 02 Server#8482; 02 實(shí)用工具一批 02 Transact-SQL 02 語(yǔ)句的結(jié)束。 0202 0202 語(yǔ)法 02
02 GO 0202 0202 注釋 02
02 GO 02 不是 02 Transact-SQL 02 語(yǔ)句;而是可為 02 osql 02 和 02 isql 02 實(shí)用工具及 02 SQL 02 Server 02 查詢(xún)分析器識(shí)別的命令。 0202 0202 SQL 02 Server 02 實(shí)用工具將 02 GO 02 解釋為應(yīng)將當(dāng)前的 02 Transact-SQL 02 批處理語(yǔ)句發(fā)送給 02 SQL 02 Server 02 的信號(hào)。當(dāng)前批處理語(yǔ)句是自上一 02 GO 02 命令后輸入的所有語(yǔ)句,若是第一條 02 GO 02 命令,則是從特殊會(huì)話或腳本的開(kāi)始處到這條 02 GO 02 命令之間的所有語(yǔ)句。SQL 02 查詢(xún)分析器和 02 osql 02 及 02 isql 02 命令提示實(shí)用工具執(zhí)行 02 GO 02 命令的方式不同。有關(guān)更多信息,請(qǐng)參見(jiàn) 02 osql 02 實(shí)用工具、isql 02 實(shí)用工具和 02 SQL 02 查詢(xún)分析器。 02 0202 0202 GO 02 命令和Transact-SQL 02 語(yǔ)句不可在同一行上。但在 02 GO 02 命令行中可包含注釋。 0202 0202 用戶(hù)必須遵照使用批處理的規(guī)則。例如,
在批處理中的第一條語(yǔ)句后執(zhí)行任何存儲(chǔ)過(guò)程必須包含 02 EXECUTE 02 關(guān)鍵字。局部(用戶(hù)定義)變量的作用域限制在一個(gè)批處理中,
不可在 02 GO 02 命令后引用。 0202 0202 USE 02 pubs 02
02 GO 02
02 DECLARE 02 @MyMsg 02 VARCHAR(50) 02
02 SELECT 02 @MyMsg 02 = 02 'Hello, 02 World.' 02
02 GO 02 -- 02 @MyMsg 02 is 02 not 02 valid 02 after 02 this 02 GO 02 ends 02 the 02 batch. 0202 0202 -- 02 Yields 02 an 02 error 02 because 02 @MyMsg 02 not 02 declared 02 in 02 this 02 batch. 02
02 PRINT 02 @MyMsg 02
02 GO 0202 0202 SELECT 02 @@VERSION; 02
02 -- 02 Yields 02 an 02 error: 02 Must 02 be 02 EXEC 02 sp_who 02 if 02 not 02 first 02 statement 02 in 02 02
02 -- 02 batch. 02
02 sp_who 02
02 GO 0202 0202 SQL 02 Server 02 應(yīng)用程序可將多條 02 Transact-SQL 02 語(yǔ)句作為一個(gè)批處理發(fā)給 02 SQL 02 Server 02 去執(zhí)行。在此批處理中的語(yǔ)句編譯成一個(gè)執(zhí)行計(jì)劃。程序員在 02 SQL 02 Server 02 實(shí)用工具中執(zhí)行特定語(yǔ)句,或生成 02 Transact-SQL 02 語(yǔ)句腳本在 02 SQL 02 Server 02 實(shí)用工具中運(yùn)行,用 02 GO 02 來(lái)標(biāo)識(shí)批處理的結(jié)束。 0202 0202 如果基于 02 DB-Library、ODBC 02 或 02 OLE 02 DB 02 APIs 02 的應(yīng)用程序試圖執(zhí)行 02 GO 02 命令時(shí)會(huì)收到語(yǔ)法錯(cuò)誤。SQL 02 Server 02 實(shí)用工具永遠(yuǎn)不會(huì)向服務(wù)器發(fā)送 02 GO 02 命令。 0202 0202 權(quán)限 02
02 GO 02 是一個(gè)不需權(quán)限的實(shí)用工具命令??梢杂扇魏斡脩?hù)執(zhí)行。 0202 0202 示例 02
02 下面的示例創(chuàng)建兩個(gè)批處理。第一個(gè)批處理只包含一條 02 USE 02 pubs 02 語(yǔ)句,用于設(shè)置數(shù)據(jù)庫(kù)上下文。剩下的語(yǔ)句使用了一個(gè)局部變量,
因此所有的局部變量聲明必須在一個(gè)批處理中。
這一點(diǎn)可通過(guò)在最后一條引用此變量的語(yǔ)句之后才使用 02 GO 02 命令來(lái)做到。 0202 0202 USE 02 pubs 02
02 GO 02
02 DECLARE 02 @NmbrAuthors 02 int 02
02 SELECT 02 @NmbrAuthors 02 = 02 COUNT(*) 02
02 FROM 02 authors 02
02 PRINT 02 'The 02 number 02 of 02 authors 02 as 02 of 02 ' 02 + 02
02 02 02 02 02 02 02 CAST(GETDATE() 02 AS 02 char(20)) 02 + 02 ' 02 is 02 ' 02 + 02
02 02 02 02 02 02 02 CAST(@NmbrAuthors 02 AS 02 char 02 (10)) 02