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

sqlserver 腳本和批處理指令小結(jié)

 更新時間:2012年05月16日 17:30:13   作者:  
sqlserver 腳本和批處理指令小結(jié),學(xué)習(xí)sqlserver的朋友可以收藏下

一.腳本基礎(chǔ)
     1.USE語句
          設(shè)置當(dāng)前數(shù)據(jù)庫。
     2.聲明變量
          語法:DECLARE @變量名 變量類型
          在聲明變量后,給變量賦值之前,變量的值為NULL。
          將系統(tǒng)函數(shù)賦給聲明的變量,這個方法可以使我們能更安全地使用值,該值只有人為地改變時它才變動。如果直接使用系統(tǒng)函數(shù)本身,那么當(dāng)它發(fā)生變動時,有
     時會無法確定其究竟為何,因為大多數(shù)系統(tǒng)函數(shù)值是由系統(tǒng)確定的。這容易在你不預(yù)期的情況下導(dǎo)致系統(tǒng)改變了值,引起不可預(yù)期的后果。
          (1).給變量賦值
               SET:當(dāng)進(jìn)行變量賦值是,該值已經(jīng)知道是確切值或者是其他變量時,使用SET。
               SELECT:當(dāng)變量賦值基于一個查詢時,使用SELECT。
          (2).系統(tǒng)函數(shù)
               SQL Server 2005中有30多個無參的系統(tǒng)函數(shù),其中一些最重要的如下:
               @@ERROR:                    返回當(dāng)前連接下,最后執(zhí)行的T-SQL語句的錯誤代碼,如無錯誤返回0。
               @@FETCH_STATUS:       和FETCH語句配合使用。
               @@IDENTITY:                返回最后一句運行語句的、自動生成的標(biāo)識值,作為最后INSERT或者SELECT INTO語句的結(jié)果。
               @@ROWCOUNT:              返回最后一個語句影響的行數(shù)。
               @@SERVERNAME:          返回腳本正在其上運行的本地服務(wù)的名字。
               @@TRANCOUNT:            返回活動事務(wù)的數(shù)量,特別是針對當(dāng)前連接的事務(wù)的瓶頸程度。

二.批處理
     (1).GO單獨占一行。在同一行上,T-SQL語句不能在GO語句之前。
     (2).所有語句從腳本開始處或者上一個GO語句開始編譯,直到下一個GO語句或者腳本結(jié)束,將這段代碼編譯到一個執(zhí)行計劃中并相互獨立地送往服務(wù)器。前一
 個執(zhí)行計劃中發(fā)生錯誤,不會影響后一個執(zhí)行計劃。
     (3).GO不是一個T-SQL命令,只是被編輯工具識別的命令。當(dāng)編輯工具碰到GO,它把GO看做一個結(jié)束批處理的標(biāo)記,將其打包,然后作為一個獨立單元發(fā)送到
 服務(wù)器——不包括GO,服務(wù)器對于GO沒有任何概念。         
     1.批處理中的錯誤
          語法錯誤,運行時錯誤。
     2.何時使用批處理
          (1).獨自成批處理的語句
               有幾個命令必須獨自成批處理,它們包括:
                    CREATE DEFAULT
                    CREATE PROCEDURE
                    CREATE RULE
                    CREATE TRIGGER
                    CREATE VIEW
               如果想將這些語句中的任何一條和其他語句組成單獨的一個腳本,那么需要采用一個GO語句將它們分別斷開,歸入各自的批處理中。
          (2).使用批處理建立優(yōu)先級
               使用批處理最可靠的例子是,當(dāng)需要考慮語句執(zhí)行的優(yōu)先順序時,也就是說,需要一個任務(wù)在另一個任務(wù)開始前執(zhí)行。
               例如:
                    CREATE DATABASE Test                    

復(fù)制代碼 代碼如下:

CREATE TABLE TestTable
(
col1 INT,
col2 INT
)

               執(zhí)行語句,會發(fā)現(xiàn)生成的表沒有在Test數(shù)據(jù)庫中,而是在master數(shù)據(jù)庫中(如果當(dāng)前使用的數(shù)據(jù)庫是系統(tǒng)數(shù)據(jù)庫)。因為在執(zhí)行腳本的時候,使用的數(shù)據(jù)
          庫是系統(tǒng)數(shù)據(jù)庫,該數(shù)據(jù)庫是當(dāng)前的,所以生成的表在系統(tǒng)數(shù)據(jù)庫中。看起來,應(yīng)該在創(chuàng)建表之前指定數(shù)據(jù)庫Test。然而,這樣仍然存在問題。解析器試圖校
          驗代碼,發(fā)現(xiàn)我們用USE命令引用的數(shù)據(jù)庫并不存在。原因在于創(chuàng)建數(shù)據(jù)庫的語句和創(chuàng)建表的語句寫在一個批處理中,在執(zhí)行該腳本之前,當(dāng)然數(shù)據(jù)庫還沒有
          創(chuàng)建。根據(jù)批處理的要求,我們將創(chuàng)建數(shù)據(jù)庫和創(chuàng)建表的腳本用GO語句分為兩個獨立的批處理。正確代碼如下:
復(fù)制代碼 代碼如下:

CREATE DATABASE Test
GO

USE Test
CREATE TABLE TestTable
(
col1 INT,
col2 INT
)

三.動態(tài)SQL:使用EXE命令生成代碼
     語法:EXEC/EXECUTE ({<字符串變量> | '<字面值命令字符串>'})
     1.EXEC的作用域
          真正的調(diào)用EXEC語句的行,擁有同該EXEC語句正在運行的批或過程中的其他代碼相同的作用域。但是作為EXEC語句結(jié)果而被執(zhí)行的代碼,被認(rèn)為是在它自
     己的批中。
          例如:
          DECLARE @OutVar VARCHAR(50)
          EXEC ('SELECT @OutVar = FirstName FROM Contact WHERE ContactID = 1')
          這里系統(tǒng)會報錯,指出必須聲明變量@OutVar。因為EXEC的語句獨自成為一個批處理,其中的變量不能和其外的作用域相溝通,只在這個批處理中有效。此
     時,@OutVar的值為NULL。正確的寫法如下:
          EXEC ('DECLARE @OutVar VARCHAR(50)
                    SELECT @OutVar = FirstName FROM Contact WHERE ContactID = 1')
          這里,我們看到兩中不同的作用域,這兩種作用域間不能相互溝通。如果不采用外部機制,比如一個臨時表,我們就沒有辦法實現(xiàn)在內(nèi)部作用域和外部作用域
     之間傳遞信息。有一個例外的事情是可以在EXEC的區(qū)域內(nèi)部出現(xiàn),并且也能在EXEC執(zhí)行后被看到,這就是系統(tǒng)函數(shù)。因此,像@@ROWCOUNT這樣的變量仍然
     能夠被使用。
     2.安全上下文和EXEC
          當(dāng)賦予某人權(quán)利運行一個存儲過程,意味著他也能獲得權(quán)利去執(zhí)行存儲過程內(nèi)部的動作。比如,有一個存儲過程用來列出去年內(nèi)所有的雇傭員工。其中有權(quán)限
     執(zhí)行該存儲過程的人,才能夠執(zhí)行并返回結(jié)果——即使他沒有權(quán)限直接訪問人力資源的員工表。
          這樣隱含權(quán)限對于EXEC語句是無效的。在默認(rèn)情況下,任何在一個EXEC語句內(nèi)部建立的參照,都將在當(dāng)前用戶的安全上下文中運行。因此,我們有權(quán)利去訪
     問一個叫spNewEmployee的存儲過程,但是卻沒有權(quán)利去訪問員工表。如果spNewEmployee通過一個簡單的SELECT語句獲得值,那么一切正常。但是如果
     pNewEmployee使用EXEC語句去執(zhí)行一個SELECT語句,這個EXEC語句將失敗——因為沒有權(quán)利訪問員工表。
     3.用戶自定義函數(shù)和EXEC關(guān)聯(lián)
          不能在同一個語句中同時運行一個函數(shù)和EXEC語句。例如:
          DECLARE @Num INT
          SET @Num = 3
          EXEC ('SELECT LEFT(LastName, ' + CAST(@Num AS VARCHAR) + ') AS FilingName FROM Contact')
          這個語句會返回一個錯誤消息,因為CAST函數(shù)需要在EXEC所在行之前被解析。正確代碼如下:
          DECLARE @Num INT
          DECLARE @str VARCHAR(255)
          SET @Num = 3
          SET @str = 'SELECT LEFT(LastName, ' + CAST(@Num AS VARCHAR) + ') AS FilingName FROM Contact'
          EXEC (@str)
          這個例子工作正常,因為EXEC的輸入值已經(jīng)是一個完整的字符串。
     4.EXEC和用戶自定義函數(shù)
          一般來說,不允許用戶自定義函數(shù)內(nèi)部使用EXEC去運行動態(tài)SQL,但是,使用EXEC運行一個存儲過程,少數(shù)情況是合法的。

相關(guān)文章

  • SQL實現(xiàn)讀寫分離的分配的幾種方式

    SQL實現(xiàn)讀寫分離的分配的幾種方式

    讀寫分離的分配,即如何在應(yīng)用程序中將讀操作和寫操作路由到不同的數(shù)據(jù)庫實例,可以通過幾種不同的方法來實現(xiàn),下面就來介紹SQL實現(xiàn)讀寫分離的分配的幾種方式,感興趣的可以了解一下
    2025-04-04
  • SQL SERVER 2012新增函數(shù)之邏輯函數(shù)CHOOSE詳解

    SQL SERVER 2012新增函數(shù)之邏輯函數(shù)CHOOSE詳解

    這篇文章主要介紹了SQL SERVER 2012新增函數(shù)之邏輯函數(shù)CHOOSE的相關(guān)資料,文中介紹的很詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • SQL語句中的ON DUPLICATE KEY UPDATE使用

    SQL語句中的ON DUPLICATE KEY UPDATE使用

    本文主要介紹了SQL語句中的ON DUPLICATE KEY UPDATE使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SQL Server數(shù)據(jù)庫中批量導(dǎo)入數(shù)據(jù)的四種方法總結(jié)

    SQL Server數(shù)據(jù)庫中批量導(dǎo)入數(shù)據(jù)的四種方法總結(jié)

    數(shù)據(jù)導(dǎo)入一直是項目人員比較頭疼的問題。其實,在SQL Server中集成了很多成批導(dǎo)入數(shù)據(jù)的方法,接下來為大家介紹下常用的四種批量導(dǎo)入數(shù)據(jù)的方法,感興趣的各位可以參考下哈
    2013-03-03
  • SQL Report Builder 報表里面的常見問題分析

    SQL Report Builder 報表里面的常見問題分析

    這篇文章主要介紹了SQL Report Builder 報表里面的常見問題分析的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • SQL Server存儲過程中編寫事務(wù)處理的方法小結(jié)

    SQL Server存儲過程中編寫事務(wù)處理的方法小結(jié)

    這篇文章主要介紹了SQL Server存儲過程中編寫事務(wù)處理的方法,結(jié)合實例形式總結(jié)分析了三種存儲過程中編寫事務(wù)處理的方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-03-03
  • SQL?SERVER觸發(fā)器詳解

    SQL?SERVER觸發(fā)器詳解

    本文詳細(xì)講解了SQL?SERVER中觸發(fā)器的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 診斷SQLSERVER問題常用的日志概述及使用

    診斷SQLSERVER問題常用的日志概述及使用

    這里主要有兩個:1.Windows事件日志2.SQLSERVER ErrorLog記下來將詳細(xì)介紹下它們的作用及使用方法,感興趣的朋友可以了解下,或許本的知識點對你有所幫助
    2013-02-02
  • sql server不存在 sql server拒絕訪問

    sql server不存在 sql server拒絕訪問

    總出現(xiàn)“SQL Server不存在或訪問被拒絕”。1,SQL Server名稱或IP地址拼寫有誤 2,服務(wù)器端網(wǎng)絡(luò)配置有誤3,客戶端網(wǎng)絡(luò)配置有誤
    2007-12-12
  • SQL Server2012在開發(fā)中的一些新特性

    SQL Server2012在開發(fā)中的一些新特性

    SQL Server 2012已經(jīng)發(fā)布一段時間了,最近在新的機器上安裝了最新的SQL Server 2012 SP1,體檢下感覺良好。官方給出了一大堆SQL2012相對于SQL2008R2的新特性,但是大多數(shù)對于普通開發(fā)人員來說都是浮云,根本用不到,下面就說說一些對于開發(fā)人員來說比較有用的新特性。
    2013-04-04

最新評論

日照市| 闵行区| 望奎县| 博爱县| 三亚市| 和政县| 隆安县| 平顺县| 富锦市| 法库县| 宁晋县| 玛沁县| 珲春市| 屯昌县| 信阳市| 晋州市| 龙岩市| 平乡县| 河北省| 长岭县| 色达县| 孟津县| 慈利县| 吉安县| 嫩江县| 和平县| 通渭县| 新平| 达尔| 福泉市| 乐业县| 涟源市| 阿巴嘎旗| 涟源市| 红桥区| 遵义市| 将乐县| 内江市| 高阳县| 靖江市| 郯城县|