最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL?Server使用T-SQL語句批處理

 更新時間:2022年05月20日 11:58:12   作者:springsnow  
這篇文章介紹了SQL?Server使用T-SQL語句進(jìn)行批處理的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

批處理簡介

批處理是作為一個邏輯單元的T-SQL語句。如果一條語句不能通過語法分析,那么不會運行任何語句。如果一條語句在運行時失敗,那么產(chǎn)生錯誤的語句之前的語句都已經(jīng)運行了。

為了將一個腳本分為多個批處理,可使用GO語句。

GO語句的特點:

  • GO語句必須自成一行,只有注釋可以再同一行上。
  • 它使得自腳本的開始部分或者最近一個GO語句以后的所有語句編譯成一個執(zhí)行計劃并發(fā)送到服務(wù)器,與任何其他批處理無關(guān)。
  • GO語句不是T-SQL命令,而是由各種SQL Server命令實用程序(如:Management Studio中的"查詢"窗口)識別的命令。

1、自成一行

GO命令應(yīng)當(dāng)自成一行。在技術(shù)上,可以在GO命令之后的同一行開始一個新的批處理,但是這會嚴(yán)重影響可讀性。T-SQL語句不能放在GO語句之前,否則GO語句經(jīng)常會被錯誤地理解,從而造成語法分析錯誤或產(chǎn)生一些不可預(yù)料的后果。例如,在WHERE子句之后使用一個GO語句。

SELECT * FROM Person WHERE Id = 100 GO

分析器就不知道如何處理。

消息 102,級別 15,狀態(tài) 1,第 1 行
  'GO' 附近有語法錯誤。

2、每個批處理單獨發(fā)送到服務(wù)器

因為每個批處理被單獨地處理,所以一個批處理中的錯誤不會阻止另一個批處理運行。要說明這點,請看一下下面的代碼。

SELECT 1/0
  GO
  SELECT 0/1

如果這些批處理之間沒有任何依賴性,則每個批處理在運行時是完全自治的。

消息 8134,級別 16,狀態(tài) 1,第 1 行
  遇到以零作除數(shù)錯誤。

  (1 行受影響)

如果這些批處理之間存在依賴性,那么錯誤發(fā)生之后的每個批處理都會失敗。依賴性指的是后面的語句,依賴前面執(zhí)行的結(jié)果或變量等等。  

3、GO不是T-SQL命令

一個常見的錯誤是認(rèn)為GO是T-SQL命令,其實GO是一個只能被編輯工具(Management Studio)識別的命令。

當(dāng)編輯工具遇到GO語句時,會將GO語句看做一個終止批處理的標(biāo)記,將其打包,并且作為一個獨立的單元發(fā)送到服務(wù)器,不包括GO。因為服務(wù)器本身根本不知道GO是什么意思。

批處理中錯誤

批處理中的錯誤分為以下兩類:

  • 語法錯誤
  • 運行時錯誤

如果查詢分析器發(fā)現(xiàn)一個語法錯誤,那么批處理的處理過程會被立即取消。因為語法檢查發(fā)生在批處理編譯或者執(zhí)行之前,所以在語法檢查期間的一個失敗意味著還沒有批處理被執(zhí)行-不管語法錯誤發(fā)生在批處理中的什么位置。

運行時錯誤的工作方式有很大不同,因為任何在遇到運行時錯誤之前執(zhí)行的語句已經(jīng)完成了,所以除非是未提交事務(wù)的一部分,否則這些語句所做的任何事情都已經(jīng)是現(xiàn)實了。

一般而言,運行時錯誤將終止從錯誤發(fā)生的地方到此批處理末端的批處理的執(zhí)行。下一個批處理不影響。

何時使用批處理

使用批處理有若干個理由,但是所有的批處理都有一個共同點-當(dāng)腳本中的一些事情必須發(fā)生在另外一件事情之前或者分開發(fā)生時,需要使用批處理。

1.要求有自己的批處理的語句

有一些命令必須有他們自己的批處理。

  • CREATE DEFAULT
  • CREATE PROCEDURE
  • CREATE RULE
  • CREATE TRIGGER
  • CREATE VIEW

如果想在單個腳本中將這些語句中的任意一個和其他語句進(jìn)行組合,那么需要通過使用GO語句將他們分散到各自的批處理中。

2、使用批處理建立優(yōu)先權(quán)

當(dāng)需要建立優(yōu)先權(quán)時,就可能用到批處理。也就是說,在下一個任務(wù)開始之前,需要全部完成上一個任務(wù)。在大多數(shù)時候,SQL Server可以很好地處理這種情況 - 腳本中的第一條語句是首先執(zhí)行的,并且腳本中的第二條語句可以依賴第二條語句運行時服務(wù)器所處的適當(dāng)狀態(tài)。

下面來看一個例子:

USE master

  CREATE DATABASE Test

  CREATE TABLE TestTable
  (
      col1 int,
      col2 int
  )

當(dāng)執(zhí)行上面的腳本,提示命令已成功完成。但是真的沒問題嗎?

當(dāng)查看Test數(shù)據(jù)庫時,發(fā)現(xiàn)表TestTable并不存在,反而master數(shù)據(jù)庫里多了一個TestTable表。

為什么表被創(chuàng)建在了master數(shù)據(jù)庫中,答案取決于當(dāng)運行CREATE TABLE語句時,當(dāng)前數(shù)據(jù)庫是什么。在這個例子中,它恰好是master數(shù)據(jù)庫,所以表就創(chuàng)建在該數(shù)據(jù)庫中。

你可能以為將上述代碼改成這樣可能就能夠解決:

CREATE DATABASE Test

  USE Test

  CREATE TABLE TestTable
  (
      col1 int,
      col2 int
  )

但很遺憾,并不能,錯誤信息如下:

消息 911,級別 16,狀態(tài) 1,第 3 行
  數(shù)據(jù)庫 'Test' 不存在。請確保正確地輸入了該名稱。

分析器嘗試驗證代碼時,發(fā)現(xiàn)USE引用一個不存在的數(shù)據(jù)庫,這是批處理語句不可或缺,正確的代碼如下:

CREATE DATABASE Test
  GO  --此GO是兩主角
  USE Test

  CREATE TABLE TestTable
  (
      col1 int,
      col2 int
  )

就這樣加了一個GO之后,問題成功解決。

下面再來看一個例子:

USE Test
  ALTER TABLE TestTable
      ADD col3 int
  INSERT INTO TestTable
      (col1,col2,col3)
  VALUES
      (1,1,1)

以上代碼在查詢分析器中提示col3列不存在。實際上,以上代碼也可以通過一個GO解決。

USE Test
  ALTER TABLE TestTable
      ADD col3 int
  GO  --先更改數(shù)據(jù)庫,然發(fā)送插入,此時就是分開進(jìn)行語法驗證了
  INSERT INTO TestTable
      (col1,col2,col3)
  VALUES
      (1,1,1)

到此這篇關(guān)于SQL Server批處理T-SQL語句的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • sqlserver 存儲過程帶事務(wù) 拼接id 返回值

    sqlserver 存儲過程帶事務(wù) 拼接id 返回值

    存儲過程帶事務(wù),拼接id,返回值 以下SQL以防以后還需用到,特此備份
    2012-10-10
  • SQL中的ISNULL函數(shù)使用介紹

    SQL中的ISNULL函數(shù)使用介紹

    SQL中有多種多樣的函數(shù),下面將為您介紹SQL中的ISNULL函數(shù),包括其語法、注釋、返回類型等,供您參考,希望對您學(xué)習(xí)SQL能夠有所幫助
    2013-04-04
  • SQL窗口函數(shù)的使用方法

    SQL窗口函數(shù)的使用方法

    MySQL8.0版本之后,加入了窗口函數(shù)功能,簡化了數(shù)據(jù)分析工作中查詢語句的書寫。本文主要介紹了SQL窗口函數(shù)的使用方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 阿拉伯?dāng)?shù)字轉(zhuǎn)大寫中文_財務(wù)常用sql存儲過程

    阿拉伯?dāng)?shù)字轉(zhuǎn)大寫中文_財務(wù)常用sql存儲過程

    需求:輸入阿拉伯?dāng)?shù)字,給出對應(yīng)的中文大寫,編寫為存儲過程或函數(shù)
    2008-10-10
  • SQL判斷是否

    SQL判斷是否"存在",還在用 count 操作?很耗時的!

    這篇文章主要介紹了SQL判斷是否"存在",還在用 count 操作?很耗時的!本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • SQLServer代理中如何給操作員發(fā)送事件警報郵件

    SQLServer代理中如何給操作員發(fā)送事件警報郵件

    在所有的SQL?Server系統(tǒng)中至少要配置一個操作員,這會保證對于大多數(shù)嚴(yán)重錯誤,一些特定的提醒會發(fā)給你,當(dāng)然,發(fā)送郵件警報的話需要SQL?Server能發(fā)送郵件警報,另外,當(dāng)警報觸發(fā)時可以執(zhí)行作業(yè)意味著你可以通過自動化操作修正很多常規(guī)錯誤,而不需要每次都人為干預(yù)錯誤發(fā)生
    2025-03-03
  • msSQL中having的用處詳解

    msSQL中having的用處詳解

    關(guān)于SQL中的HAVING,相信大家都不陌生,它往往與GROUP?BY配合使用,為聚合操作指定條件,下面這篇文章主要給大家介紹了關(guān)于msSQL中having用處的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 將sqlserver數(shù)據(jù)遷移到mysql的詳細(xì)步驟記錄

    將sqlserver數(shù)據(jù)遷移到mysql的詳細(xì)步驟記錄

    這篇文章主要介紹了將SQL?Server數(shù)據(jù)遷移到MySQL的步驟,包括導(dǎo)出數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)格式和導(dǎo)入數(shù)據(jù),通過示例和工具說明,幫助大家順利完成遷移任務(wù),需要的朋友可以參考下
    2025-01-01
  • win2008 r2 安裝sql server 2005/2008 無法連接服務(wù)器解決方法

    win2008 r2 安裝sql server 2005/2008 無法連接服務(wù)器解決方法

    在與 SQL Server 建立連接時出現(xiàn)與網(wǎng)絡(luò)相關(guān)的或特定于實例的錯誤。未找到或無法訪問服務(wù)器。請驗證實例名稱是否正確并且 SQL Server 已配置為允許遠(yuǎn)程連接
    2015-01-01
  • sql表連接查詢使用方法(sql多表連接查詢)

    sql表連接查詢使用方法(sql多表連接查詢)

    表連接就是通過關(guān)聯(lián)多張表,從而檢索出需要的數(shù)據(jù)的方法,下面我們通過代碼示例來學(xué)習(xí)一下sql的表連接使用方法
    2014-01-01

最新評論

四子王旗| 运城市| 凉城县| 翼城县| 延吉市| 光泽县| 福鼎市| 潢川县| 剑河县| 达孜县| 西充县| 内乡县| 商河县| 高雄县| 肥乡县| 长乐市| 应用必备| 福安市| 垣曲县| 同心县| 忻城县| 佛冈县| 台江县| 铜山县| 柳江县| 邢台县| 沂水县| 瑞安市| 宁武县| 武城县| 谢通门县| 永川市| 长丰县| 银川市| 楚雄市| 英超| 内乡县| 富平县| 灵石县| 确山县| 大足县|