第03章 Transact-SQL_第1頁
第03章 Transact-SQL_第2頁
第03章 Transact-SQL_第3頁
第03章 Transact-SQL_第4頁
第03章 Transact-SQL_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2022-5-3SQL Server 2005 2SQL Server 2005第第3 3章章 Transact-SQLTransact-SQL T-SQL語言用于管理SQL Server Database Engine實例,創建和管理數據庫對象,以及插入、檢索、修改和刪除數據。 T-SQL是對按照國際標準化組織(ISO)和美國國家標準協會(ANSI)發布的SQL標準定義的語言的擴展。 對用戶來說,T-SQL是可以與SQL Server數據庫管理系統進行交互的唯一語言。 介紹該語言的基本概念、語法格式、運算符和表達式以及基本語句和函數等的使用。3SQL Server 2005目錄目錄3.1 T

2、ransact-SQL3.1 Transact-SQL語法約定語法約定 3.2 Transact-SQL3.2 Transact-SQL的新增功能和增強功能的新增功能和增強功能 3.3 3.3 運算符運算符 3.4 3.4 數據類型數據類型 3.5 3.5 函數函數 3.6 Transact-SQL3.6 Transact-SQL變量變量 3.7 3.7 表達式表達式 3.8 3.8 控制流控制流 3.9 3.9 保留關鍵字保留關鍵字 3.10 3.10 批處理批處理 3.11 Transact-SQL3.11 Transact-SQL游標游標 練習題練習題3 3 上機實習上機實習2 2 4S

3、QL Server 2005 T-SQL是使用SQL Server的核心,與SQL Server實例通信的所有應用程序都通過將T-SQL語句發送到服務器運行(不考慮應用程序的用戶界面)來實現使用SQL Server及其數據的,應該說認真學習好T-SQL是深入掌握SQL Server的必經之路。表3-1反映出構成T-SQL的主要內容。SQL 元素說明標識符表、視圖、列、數據庫和服務器等對象的名稱。數據類型定義數據對象(如列、變量和參數)所包含的數據的類型。大多數T-SQL語句并不顯式引用數據類型,但它們的結果受語句中所引用對象的數據類型之間的交互操作影響。函數語法元素,可以接受零個、一個或多個輸

4、入值,并返回一個標量值或表格形式的一組值。示例包括將多個值相加的 SUM 函數、確定兩個日期之間相差多少個時間單位的DATEDIFF函數、獲取SQL Server 2005實例名稱的 SERVERNAME 函數或在遠程服務器上執行T-SQL語句并檢索結果集的OPENQUERY函數。表達式SQL Server 可以解析為單個值的語法單位。表達式的示例包括常量、返回單值的函數、列或變量的引用。表達式中的運算符與一個或多個簡單表達式一起使用,構造一個更為復雜的表達式。例如,表達式 PriceColumn * 1.1 中的乘號 (*)使價格提高百分之十。注釋插入到T-SQL語句或腳本中、用于解釋語句作

5、用的文本段。SQL Server 不執行注釋。保留關鍵字保留下來供SQL Server使用的詞,不應用作數據庫中的對象名。3.1 3.1 Transact-SQL語法約定語法約定5SQL Server 2005表3-2 T-SQL參考的語法約定約定用 于UPPERCASE(大寫)T-SQL 關鍵字。Italic用戶提供的T-SQL語法的參數。bold(粗體)數據庫名、表名、列名、索引名、存儲過程、實用工具、數據類型名以及必須按所顯示的原樣鍵入的文本。下劃線指示當語句中省略了包含帶下劃線的值的子句時應用的默認值。|(豎線)分隔括號或大括號中的語法項。只能選擇其中一項。 (方括號)可選語法項。不要

6、鍵入方括號。 (大括號)必選語法項。不要鍵入大括號。,.n指示前面的項可以重復 n 次。每一項由逗號分隔。.n指示前面的項可以重復 n 次。每一項由空格分隔。;可選的T-SQL語句終止符。不要鍵入方括號。 :=語法塊的名稱。此約定用于對可在語句中的多個位置使用的過長語法段或語法單元進行分組和標記。可使用的語法塊的每個位置由括在尖括號內的標簽指示:。3.1 Transact-SQL3.1 Transact-SQL語法約定語法約定-語法約定語法約定6SQL Server 2005除非另外指定,否則,所有對數據庫對象名的T-SQL引用可以是由四部分組成的名稱,格式如下:server_name.dat

7、abase_name.schema_name | database_name.schema_name | schema_name.object_nameserver_nameserver_name:指定鏈接的服務器名稱或遠程服務器名稱;database_namedatabase_name:如果對象駐留在SQL Server的本地實例中,則指定 SQL Server 數據庫的名稱。如果對象在鏈接服務器中,則database_name將指定OLE DB目錄;schema_nameschema_name:如果對象在 SQL Server 數據庫中,則指定包含對象的架構架構的名稱。如果對象在鏈接服務器

8、中,則 schema_name 將指定OLE DB架構名稱;object_nameobject_name:對象的名稱。3.1 Transact-SQL3.1 Transact-SQL語法約定語法約定-多部分名稱多部分名稱7SQL Server 2005 若要省略中間節點,請使用句點來指示這些位置。表3-3顯示了對象名的有效格式。表3-3 對象名的有效格式對象引用格式說明server.database.schema.object四個部分的名稱server.database.object省略架構架構名稱server.schema.object省略數據庫名稱server.object省略數據庫和架構

9、名稱database.schema.object省略服務器名database.object省略服務器和架構名稱schema.object省略服務器和數據庫名稱object省略服務器、數據庫和架構名稱3.1 Transact-SQL3.1 Transact-SQL語法約定語法約定-多部分名稱多部分名稱8SQL Server 2005返回本節首頁 3 3、代碼示例約定、代碼示例約定n除非專門說明,否則,在T-SQL參考中提供的示例都已使用 SQL Server Management Studio 及其以下選項的默認設置進行了測試:lANSI_NULLS、lANSI_NULL_DFLT_ON、lAN

10、SI_PADDING、lANSI_WARNINGS、lCONCAT_NULL_YIELDS_NULL、lQUOTED_IDENTIFIER。nT-SQL 參考中的大多數代碼示例都已在運行區分大小寫排序順序的服務器上進行了測試。n測試服務器通常運行 ANSI/ISO 1252 代碼頁。3.1 Transact-SQL3.1 Transact-SQL語法約定語法約定-代碼示例約定代碼示例約定9SQL Server 2005 SQL Server 2005SQL Server 2005擴展并增強擴展并增強T-SQLT-SQL語法以支持新增語法以支持新增功能和特性。本功能和特性。本SQL Server

11、SQL Server版本中提供的版本中提供的T-SQLT-SQL增強功增強功能分為以下幾類:能分為以下幾類:1)示例數據庫增強功能;2)T-SQL 數據類型;3)數據庫控制臺命令(DBCC)語句;4)數據定義語言語句;5)數據操作語言語句;6)元數據;7)復制系統存儲過程;8)其它語句。 3.3.2 Transact-SQL2 Transact-SQL的新增功能和增強功能的新增功能和增強功能10SQL Server 2005n運算符是一種符號,用來指定要在一個或多個表達式中執行的操作。nSQL Server 2005所使用的運算符類別有:算術運算符、邏輯運算符、賦值運算符、字符串串聯運算符、按

12、位運算符、一元運算符和比較運算符。 3.3.3 3 運算符運算符11SQL Server 2005n算術運算符對兩個表達式執行數學運算,這兩個表達式可以算術運算符對兩個表達式執行數學運算,這兩個表達式可以是數值數據類型類別的一個或多個數據類型。是數值數據類型類別的一個或多個數據類型。n算術運算符有算術運算符有: +(加)、(減)、*(乘)、/(除)、%(取模)。n % %(取模):返回一個除法運算的整數余數。(取模):返回一個除法運算的整數余數。 例如,12%5=2,這是因為12除以5,余數為2。n加加(+)(+)和減和減(-)(-)運算符也可用于對運算符也可用于對datetimedateti

13、me和和smalldatetimesmalldatetime值值執行算術運算。執行算術運算。如:select getdate(),getdate()-10,cast(getdate()-cast(2006-01-18 as datetime) as int),cast(getdate()-(2006-01-18) as int) -查詢當前日期、10天前日期、日期間隔天數等。3.3.3 3 運算符運算符-算術運算符算術運算符12SQL Server 2005邏輯運算符對某些條件進行測試,以獲得其真實情況。邏輯運算符和比較運算符一樣,返回帶有TRUE或FALSE值的Boolean數據類型,見表3

14、-4。其使用詳見第6章。表3-4 邏輯運算符運算符運算符含義含義ALL如果一組的比較都為TRUE,那么就為TRUE。AND或&如果兩個布爾表達式都為TRUE,那么就為 TRUE。ANY或SOME如果一組的比較中任何一個為TRUE,那么就為TRUE。BETWEEN如果操作數在某個范圍之內,那么就為TRUE。EXISTS如果子查詢包含一些行,那么就為 TRUE。IN如果操作數等于表達式列表中的一個,那么就為TRUE。LIKE如果操作數與一種模式相匹配,那么就為TRUE。NOT或!對任何其它布爾運算符的值取反。OR或|如果兩個布爾表達式中的一個為TRUE,那么就為TRUE。3.3.3 3 運

15、算符運算符-邏輯運算符邏輯運算符13SQL Server 2005等號(=)是唯一的T-SQL賦值運算符。在以下示例中,將創建一個MyCounter變量,然后賦值運算符將MyCounter設置為表達式返回的值。DECLARE MyCounter INT;SET MyCounter = 10;3.3.3 3 運算符運算符-賦值運算符賦值運算符14SQL Server 20053.3.3 3 運算符運算符-字符串串聯運算符字符串串聯運算符 加號(+)是字符串串聯運算符,可以用它將字符串串聯起來。其它所有字符串操作都使用字符串函數(如SUBSTRING)進行處理。例如: abc+ + def = a

16、bc def15SQL Server 20053.3.3 3 運算符運算符-字符串串聯運算符字符串串聯運算符l位運算符在兩個表達式之間執行位操作,這兩個表達式可以為整數數據類型類別中的任何數據類型。&(位與)、|(位或)、(位異或)l位運算符的操作數可以是整數或二進制字符串數據類型類別中的任何數據類型(image 數據類型除外),但兩個操作數不能同時是二進制字符串數據類型類別中的某種數據類型。表3-6顯示所支持的操作數數據類型。 16SQL Server 2005一元運算符只對一個表達式執行操作,該表達一元運算符只對一個表達式執行操作,該表達式可以是式可以是numericnumeric

17、數據類型類別中的任何一種數數據類型類別中的任何一種數據類型。具體為:據類型。具體為:l+(正):數值為正;l-(負):數值為負;l(位非):返回數字的非。其中:其中:l+(正)和-(負)運算符可以用于numeric數據類型類別中任一數據類型的任意表達式。l(位非)運算符只能用于整數數據類型類別中任一數據類型的表達式。3.3.3 3 運算符運算符-一元運算符一元運算符17SQL Server 20053.3.3 3 運算符運算符-比較運算符比較運算符l比較運算符測試兩個表達式是否相同。l除了text、ntext 或image 數據類型的表達式外,比較運算符可以用于所有的表達式。lT-SQL比較運

18、算符有:=(等于)、(大于)、=(大于等于)、=(小于等于)、(不等于)、!=(不等于,非SQL-92標準)、!(不大于,非SQL-92標準)。18SQL Server 2005l表達式計算器支持的運算符集中的每個運算符在優先級層次結構中都有指定的優先級,并包含一個計算方向。l運算符的計算方向就是運算符結合性。l具有高優先級的運算符先于低優先級的運算符進行計算。l如果復雜的表達式有多個運算符,則運算符優先級將確定執行操作的順序。執行順序可能對結果值有明顯的影響。某些運算符具有相等的優先級。l如果表達式包含多個具有相等的優先級的運算符,則按照從左到右或從右到左的方向進行運算。3.3 3.3 運算

19、符運算符-運算符優先級和結合性運算符優先級和結合性19SQL Server 2005 下表3-7按從高到低的順序列出了運算符的優先級。同層運算符具有相等的優先級。表3-7 運算符的優先級與結合性運算符運算類型結合性運算符運算類型結合性( )表達式從左到右&位與從左到右, !, 一元從右到左位異或從左到右cast as一元從右到左|位或從左到右*, / ,%乘法性的從左到右&邏輯與從左到右+, 加法性的從左到右|邏輯或從左到右, =關系從左到右? :條件表達式從右到左=, !=等式從左到右3.3 3.3 運算符運算符-運算符優先級和結合性運算符優先級和結合性20SQL Serve

20、r 2005l 在在 SQL Server 2005SQL Server 2005中,每個列、局部變量、表達式和參數中,每個列、局部變量、表達式和參數都具有一個相關的數據類型。都具有一個相關的數據類型。l數據類型是一種屬性,用于指定對象可保存的數據的類型:數據類型是一種屬性,用于指定對象可保存的數據的類型:整數數據、字符數據、貨幣數據、日期和時間數據、二進制字符串等。lSQL Server 提供系統數據類型集系統數據類型集,該類型集定義了可與 SQL Server 一起使用的所有數據類型。l您還可以在T-SQL或 .NET Framework 中定義自己的數據類型定義自己的數據類型。別名數據類

21、型基于系統提供的數據類型。l用戶定義類型從您使用 .NET Framework 支持的編程語言之一創建的類的方法和運算符中獲取它們的特征。3.3.4 4 數據類型數據類型21SQL Server 2005 SQL Server 2005SQL Server 2005中的數據類型歸納為下列類別:精確數字、中的數據類型歸納為下列類別:精確數字、Unicode Unicode 字字符串、近似數字、二進制字符串、日期和時間、其它數據類型、字符串。符串、近似數字、二進制字符串、日期和時間、其它數據類型、字符串。l 精確數字: bigint,decimal,int,numeric,smallint,mon

22、ey,tinyint,smallmoney,bitl 近似數字:float,real;日期和時間:datetime,smalldatetimel 字符串1:char,text,varchar,Unicode;l 字符串2:nchar,ntext,nvarcharl 二進制字符串:binary,image,varbinaryl 其它類型:cursor,timestamp,sql_variant,uniqueidentifier,table,xml 在在 SQL Server 2005SQL Server 2005中,根據其存儲特征,某些數據類型被指定為屬于下中,根據其存儲特征,某些數據類型被指定

23、為屬于下列各組:列各組:l 大值數據類型:varchar(max),nvarchar(max)和varbinary(max);l 大型對象數據類型:text,ntext,image,varchar(max),nvarchar(max),varbinary(max)和xml。3.3.4 4 數據類型數據類型22SQL Server 2005 當兩個不同數據類型的表達式用運算符組合后,數據類型優先級規則指定將優先級較低的數據類型轉換為優先級較高的數據類型。如果此轉換不是所支持的隱式轉換,則返回錯誤。當兩個操作數表達式具有相同的數據類型時,運算的結果便為該數據類型。 SQL Server 2005S

24、QL Server 2005對數據類型使用以下優先級順序:對數據類型使用以下優先級順序:用戶定義數據類型(最高)sql_variantxmldatetimesmalldatetimefloatrealdecimalmoneysmallmoneybigintintsmallinttinyintbitntexttextimagetimestampuniqueidentifiernvarcharncharvarcharcharvarbinarybinary(最低) 3.3.4 4 數據類型數據類型-數據類型優先級數據類型優先級23SQL Server 2005可以按以下方案轉換數據類型:可以按以下方

25、案轉換數據類型:l 當一個對象的數據移到另一個對象,或兩個對象之間的數據進行比較或組合時,數據可能需要從一個對象的數據類型轉換為另一個對象的數據類型。l 將T-SQL結果列、返回代碼或輸出參數中的數據移到某個程序變量中時,必須將這些數據從SQLServer 2005系統數據類型轉換成該變量的數據類型。l 可以隱式或顯式轉換數據類型:可以隱式或顯式轉換數據類型:1 1)隱式轉換:)隱式轉換:SQL Server會自動將數據從一種數據類型轉換為另一種數據類型。例如,將smallint與int進行比較時,在比較之前smallint會被隱式轉換為int;2 2)顯式轉換:)顯式轉換:使用CAST或CO

26、NVERT函數來實現類型的顯式轉換。3.4 3.4 數據類型數據類型-數據類型優先級數據類型優先級24SQL Server 2005以下說明下列數據類型所表現出來的轉換行為:以下說明下列數據類型所表現出來的轉換行為:lbinary和varbinary數據;lfloat和real數據;lbit數據;lmoney數據;l字符數據;ldecimal和numeric數據;ldatetime和smalldatetime數據;l使用OLE自動化存儲過程轉換數據類型。3.4 3.4 數據類型數據類型-數據類型轉換行為數據類型轉換行為25SQL Server 2005 排序規則優先順序也稱為排序規則強制規則,

27、用于確定:排序規則優先順序也稱為排序規則強制規則,用于確定:1)計算結果為字符串的表達式的最終結果排序規則;2)區分排序規則的運算符所使用的排序規則,這些運算符使用字符串輸入但不返回字符串,如LIKE和IN。排序規則的優先順序規則只應用于下列字符串數據類型:排序規則的優先順序規則只應用于下列字符串數據類型:lchar、varchar、text、lnchar、nvarchar和ntext。l具有其它數據類型的對象不參與排序規則計算。 3.4 3.4 數據類型數據類型-排序規則優先順序排序規則優先順序26SQL Server 2005l在數據類型轉換之后確定排序規則優先順序(具體略)。生在數據類型

28、轉換之后確定排序規則優先順序(具體略)。生成結果排序規則的操作數可以與提供最終結果數據類型的操成結果排序規則的操作數可以與提供最終結果數據類型的操作數不同。作數不同。例如,請看下面的批處理: CREATE TABLE TestTb(PrimaryKey int PRIMARY KEY,CharCol char(10) COLLATE French_CI_AS) SELECT * FROM TestTb WHERE CharCol LIKE Nabc l簡單表達式Nabc的Unicode數據類型有更高的數據類型優先級。l因此,所生成的表達式將Unicode數據類型分配給Nabc。但是,表達式Ch

29、arCol具有隱式排序規則標簽,而Nabc具有級別更低的強制標簽,即強制默認。l因此,所使用的排序規則是CharCol的French_CI_AS 排序規則。3.4 3.4 數據類型數據類型-排序規則優先順序排序規則優先順序27SQL Server 2005l SQL Server 2005SQL Server 2005提供了許多內置函數,同時也允許您創提供了許多內置函數,同時也允許您創建用戶定義函數。建用戶定義函數。l最常用的標量函數有:最常用的標量函數有:配置函數、游標函數、日期和時間函數、數學函數、元數據函數、安全函數、字符串函數、系統函數、系統統計函數、文本和圖像函數等10類。表3-10

30、 函數分類表函數說明行集函數返回可在SQL語句中像表引用一樣使用的對象。聚合函數對一組值進行運算,但返回一個匯總值。排名函數對分區中的每一行均返回一個排名值。標量函數對單一值進行運算,然后返回單一值。只要表達式有效,即可使用標量函數。3.5函數28SQL Server 2005 下列函數對下列函數對SQL Server 2005SQL Server 2005中的值、對象和設置中的值、對象和設置進行操作并返回有關信息。它們是:進行操作并返回有關信息。它們是:APP_NAME、CASE表達式、CASTCAST和和CONVERTCONVERT、COALESCE、CURRENT_TIMESTAMPCU

31、RRENT_TIMESTAMP、CURRENT_USERCURRENT_USER、DATALENGTH、ERROR、ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY、ERROR_STATE、fn_helpcollations、HOST_ID、HOST_NAME、IDENTITY、ISDATE、ISNULL、ISNUMERIC、NEWID、PARSENAME、ROWCOUNTROWCOUNT、SERVERPROPERTY、SESSIONPROPERTY、SESSION_USER、SYSTEM_USER、USE

32、R_NAMEUSER_NAME等。3.5函數-系統函數29SQL Server 2005在在SQL Server 2005SQL Server 2005中的統計函數如下:中的統計函數如下:(1 1)STDEVSTDEV:STDEV函數返回給定表達式中所有值的統計標準偏差。其語法格式如下:STDEV(expression),expression是數字表達式。不允許進行聚合函數運算和子查詢。expression 是精確數字或近似數字數據類型分類(bit數據類型除外)的表達式。它的返回類型是float。其它統計函數參數與返回類型情況相同。其它統計函數語法格式類似。(2 2)STDEVPSTDEVP:

33、STDEVP函數返回給定表達式中所有值的填充統計標準偏差。例如:USE AdventureWorks; SELECT STDEVP(Bonus) FROM Sales.SalesPerson(3 3)VARVAR:VAR函數返回給定表達式中所有值的統計方差。(4 4)VARPVARP:VARP函數返回給定表達式中所有值的填充的統計方差。3.5函數-常用函數介紹(統計函數)30SQL Server 2005返回本節首頁l 算術函數算術函數(例如 ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS和SIGN)返回與輸入值相同數據類型的值。l三角函數和其它函數(三角函數和

34、其它函數(包括 EXP、LOG、LOG10、SQUARE和SQRT)將輸入值投影到float并返回float值。l 除了除了RANDRAND外,所有數學函數都是外,所有數學函數都是確定性函數確定性函數。每次用一組特定輸入值調用它們時,所返回的結果相同。僅當指定種子參數時,RAND才具有確定性。 3.5函數-常用函數介紹(算術函數)31SQL Server 2005l 字符串函數用于對字符和二進制字符串進行各種字符串函數用于對字符和二進制字符串進行各種操作,它們返回對字符數據進行操作后得到的值。操作,它們返回對字符數據進行操作后得到的值。以下是這些字符串函數的函數名:ASCII、NCHAR、SO

35、UNDEX、CHAR、PATINDEX、SPACE、CHARINDEX、QUOTENAME、STR、DIFFERENCE、REPLACE、STUFF、LEFT、REPLICATE、SUBSTRING、LEN、REVERSE、UNICODE、LOWER、RIGHT、UPPER、LTRIM、RTRIM。3.5函數-常用函數介紹(字符串函數)32SQL Server 2005l隱式轉換:隱式轉換:在一般情況下,SQL Server會自動完成數據類型的轉換,例如:當表達式中用了INTEGER,SMALLINT或TINYINT時,SQL Server也可將INTEGER數據類型或表達式轉換為SMALLI

36、NT數據類型或表達式。l顯式轉換:顯式轉換:如果不能確定SQL Server是否能完成隱式轉換或者使用了不能隱式轉換的其它數據類型,就需要使用數據類型轉換函數做了。此類函數有兩種: (1)CAST函數:CAST的語法格式如下:CAST(expression AS data_type) (2)CONVERT函數:CONVERT的語法格式如下:CONVERT(data_type(length),expression,style)3.5函數-常用函數介紹(數據類型轉換函數)33SQL Server 2005l日期函數用來操作DATETIME和SMALLDATETIME類型的數據執行算術運算。l與其它

37、函數一樣,可以在SELECT語句的SELECT和WHERE子句以及表達式中使用日期函數。l其使用方法如下:日期函數(參數)。其中參數的個數隨函數的不同而不同。(1 1)DAYDAY函數:函數:DAY函數返回代表指定日期的天的日期部分的整數。 其語法格式如下:DAY(date)。其返回類型為int,此函數等價于DATEPART(dd,date)。 例3-20 此示例返回從日期 01/28/2007中返回的天數。 SELECT DAY(01/28/2007) AS 幾號(2 2)MONTHMONTH函數:函數:MONTH函數返回代表指定日期月份的整數。3.5函數-常用函數介紹(日期函數)34SQL

38、 Server 2005(3 3)YEARYEAR函數:函數:YEAR函數返回表示指定日期中的年份的整數。其語法格式如下:YEAR(dateYEAR(date) ),參數date表示datetime或smalldatetime類型的表達式。其返回類型為int。此函數等價于 DATEPART(yy,dateDATEPART(yy,date) )。例例3-22 3-22 本例從日期01/28/2007中返回年份數:SELECT 年份=YEAR(01/28/2007)(4 4)DATEADDDATEADD函數:函數:DATEADD函數表示在向指定日期加上一段時間的基礎上,返回新的 datetime

39、值。其語法格式如下:DATEADD(datepart,number,date)其中參數datepart是規定應向日期的哪一部分增加新值的參數。下表3-13列出了SQL Server識別的日期部分和縮寫。(5 5)DATEDIFFDATEDIFF函數:函數:DATEDIFF函數返回跨兩個指定日期的日期和時間邊界數。其語法格式如下:DATEDIFF(datepart,startdate,enddateDATEDIFF(datepart,startdate,enddate) )例例3-233-23 此示例確定在 pubs 數據庫中標題發布日期和當前日期間的天數。USE pubs; SELECT DA

40、TEDIFF(day,pubdate,getdate() AS no_of_days FROM titles3.5函數-常用函數介紹(日期函數)35SQL Server 2005(6)DATENAME函數:DATENAME函數返回代表指定日期的指定日期部分的字符串。其語法格式如下:DATENAME(datepart,date)(7)DATEPART函數:DATEPART函數表示返回代表指定日期的指定日期部分的整數。其語法格式如下:DATEPART(datepart,date)。DATEPART函數以整數值的形式返回日期的指定部分,此部分由datepart來指定。DATEPART(dd,date

41、)等同于DAY(date);DATEPART(mm,date)等同于MONTH(date)DATEPART(yy,date)等同于YEAR(date)。(8)GETDATE函數:GETDATE函數的語法格式如下:GETDATE()。GETDATE函數以DATETIME的缺省格式返回系統當前的日期和時間,它常作為其它函數或命令的參數使用。(9)GETUTCDATE函數:其語法格式如下:GETUTCDATE()。GETUTCDATE函數返回表示當前的UTC 時間(通用協調時間或格林尼治標準時間)的 datetime 值。當前的 UTC 時間得自當前的本地時間和運行SQL Server 實例的計算機

42、操作系統中的時區設置。3.5函數-常用函數介紹(日期函數)36SQL Server 2005表3-13 日期函數中datepart參數的取值日期部分縮寫取值區段Yearyy, yyyy1753-9999年份Quarterqq, q1-4刻Monthmm, m1-12月dayofyeardy, y1-366日Daydd, d1-31日Weekwk, ww1-54周weekdaydw1-7周幾Hourhh0-23小時minutemi, n0-59分鐘secondss, s0-59秒millisecondMs0-999毫秒3.5函數-常用函數介紹(日期函數)37SQL Server 2005以下標量

43、函數可對文本或圖像輸入值或列執行操作,并返回有以下標量函數可對文本或圖像輸入值或列執行操作,并返回有關該值的信息:關該值的信息:PATINDEXPATINDEX(見前面介紹)、(見前面介紹)、TEXTVALIDTEXTVALID、TEXTPTRTEXTPTR。(1 1)TEXTPTRTEXTPTR函數:函數:TEXTPTR函數的語法格式如下:TEXTPTR(column)l返回對應于varbinary格式的text、ntext或image列的文本指針值。如果數據類型為TEXT,NTEXT或IMAGE的列沒有賦予初值,則TEXTPTR函數返回一個NULL指針。檢索到的文本指針值可用于READTE

44、XT、WRITETEXT和UPDATETEXT語句。(2 2)TEXTVALIDTEXTVALID函數:函數:TEXTVALID函數的語法格式如下:TEXTVALID(table.column, text-pointer)。lTEXTVALID函數用于檢查指定的文本指針是否有效。如果有效,則返回1,無效則返回0,如果列未賦予初值,則返回NULL值。請注意,text 列的標識符必須包含表名。在沒有有效的文本指針的情況下,不能使用 UPDATETEXT、WRITETEXT或READTEXT。3.5函數-常用函數介紹(文本與圖像函數)38SQL Server 2005在在SQL Server 200

45、5SQL Server 2005中用戶自定義函數作為一個數據庫對象中用戶自定義函數作為一個數據庫對象來管理,可以在來管理,可以在Management StudioManagement Studio查詢窗口中利用查詢窗口中利用T-SQLT-SQL命令命令來創建來創建(CREATE FUNCTION(CREATE FUNCTION),修改),修改(ALTER FUNCTION)(ALTER FUNCTION)和刪除和刪除(DROP FUNCTION)(DROP FUNCTION)它。舉例如下:它。舉例如下:- 定義 CREATE FUNCTION dbo.DaysBetweenDatesdbo.D

46、aysBetweenDates(D1 datetime,D2 datetime) RETURNS INT AS BEGIN RETURN (SELECT cast(d2-d1) as int) END- 使用select dbo.DaysBetweenDates(getdate(),cast(2006-01-28 as datetime)3.5函數-常用函數介紹(用戶自定義函數)39SQL Server 2005 T-SQLT-SQL局部變量是可以保存單個特定類型數據值的對象。批局部變量是可以保存單個特定類型數據值的對象。批處理和腳本中的變量通常用于:處理和腳本中的變量通常用于:1)作為計數器

47、計算循環執行的次數或控制循環執行的次數;2)保存數據值以供控制流語句測試;3)保存存儲過程返回代碼要返回的數據值或函數返回值。某些某些T-SQLT-SQL系統函數的名稱以兩個系統函數的名稱以兩個atat符號符號()()打頭。打頭。l在SQL Server的早期版本中,functions被稱為全局變量,在SQL Server 2005中不再這樣認為。l因為它們不具備變量的行為,它們的語法遵循函數的規則。為此functions被稱為是系統函數。l當然使用functions時,它們具有全局變量的某些特性。3.3.6 Transact-SQL6 Transact-SQL全局變量全局變量 40SQL S

48、erver 2005l局部變量是在批處理或過程的主體中用局部變量是在批處理或過程的主體中用DECLAREDECLARE語句聲明的,并用語句聲明的,并用SETSET或或SELECTSELECT語句賦值。語句賦值。游標變量可使用此語句聲明,并可用于其它與游標相關的語句。游標變量可使用此語句聲明,并可用于其它與游標相關的語句。所有變量在聲明后均初始化為所有變量在聲明后均初始化為 NULLNULL。DECLARE local_variable的語法為: DECLARE local_variable AS data_type | cursor_variable_name CURSOR | table_v

49、ariable_name ,.n:=TABLE(|,.)lDECLARE DECLARE 語句通過以下操作初始化語句通過以下操作初始化T-SQLT-SQL變量:變量:1)指定名稱。名稱的第一個字符必須為一個;2)指定系統提供的或用戶定義的數據類型和長度。對于數值變量還指定精度和小數位數。對于XML 類型的變量,可以指定一個可選的架構集合;3)將值設置為NULL。3.3.6 Transact-SQL6 Transact-SQL局部變量局部變量 41SQL Server 2005l變量的作用域就是可以引用該變量的變量的作用域就是可以引用該變量的T-SQLT-SQL語句的范圍。語句的范圍。l變量的作

50、用域從聲明變量的地方開始到聲明變量的批處理或存儲過程的變量的作用域從聲明變量的地方開始到聲明變量的批處理或存儲過程的結尾。結尾。例如,下面的腳本存在語法錯誤,因為在一個批處理中引用了在另一個批處理中聲明的變量: USE AdventureWorks; DECLARE MyVariable int; SET MyVariable = 1; GO -中斷批處理,表示批處理結束 - MyVariable已離開其批處理的作用域,為此使用它的SELECT語句將發生語法錯 SELECT * FROM HumanResources.Employee WHERE EmployeeID=MyVariable;

51、3.6 Transact-SQL3.6 Transact-SQL變量作用域變量作用域 42SQL Server 2005l變量具有局部作用域,只在定義它們的批處理或過程中可見。變量具有局部作用域,只在定義它們的批處理或過程中可見。在本例中,為執行 sp_executesql 創建的嵌套作用域不能訪問在更高作用域中聲明的變量,從而返回錯誤。 DECLARE MyVariable int; SET MyVariable=1; EXECUTE sp_executesql Nselect MyVariable -這命令產生一個錯誤l那么如何為那么如何為T-SQLT-SQL變量設置值呢?變量設置值呢?第

52、一次聲明變量時,其值設置為 NULL。若要為變量賦值,請使用 SET 語句。這是為變量賦值的首選方法。也可以通過 SELECT 語句的選擇列表中當前所引用值為變量賦值。3.6 Transact-SQL3.6 Transact-SQL變量作用域變量作用域 43SQL Server 2005l符號和運算符的一種組合,符號和運算符的一種組合,SQL Server 2005 Database SQL Server 2005 Database Engine Engine 將處理該組合以獲得單個數據值。將處理該組合以獲得單個數據值。l簡單表達式可以是一個常量、變量、列或標量函數。簡單表達式可以是一個常量、

53、變量、列或標量函數。l復雜表達式:可以用運算符將兩個或更多的簡單表達式聯復雜表達式:可以用運算符將兩個或更多的簡單表達式聯接起來組成復雜表達式。接起來組成復雜表達式。語法為:constant|scalar_function| alias.column|local_variable|(expression)|(scalar_subquery)|unary_operatorexpression|expressionbinary_operatorexpression|ranking_windowed_function|aggregate_windowed_function。其說明見表3-14。 3.

54、3.7 7 表達式定義表達式定義44SQL Server 2005表3-14 表達式語法說明表 術語定義constant 表示單個特定數據值的符號。constant 是一個或多個字母數字字符(字母 a-z、A-Z 和數字 0-9),也可以是符號感嘆號 (!)、at 符 ()、井號 (#)等等。字符和日期時間值要用引號括起來,但二進制字符串和數字常量可以不用引號。scalar_function一個T-SQL語法單元,用于提供特定服務并返回單值。scalar_function 可以是內置標量函數(如SUM、GETDATE或CAST 函數),也可以是標量用戶定義函數。alias.由 FORM 子句中

55、的 AS 關鍵字分配給表的別名或者相關名稱。Column列的名稱。在表達式中只允許有列的名稱;不能指定由四部分組成的名稱。local_variable用戶定義變量的名稱。有關詳細信息,請參閱 DECLARE local_variable。(expression)本主題中定義的任意一個有效表達式。括號是分組運算符,用于確保先運算括號內表達式中的運算符,然后再將結果與別的表達式組合。(scalar_subquery)返回一個值的子查詢。例如:SELECT MAX(UnitPrice) FROM Productsunary_operator只有一個數字操作數的運算符: 指示正數。- 指示負數。 指示

56、一的補數運算符。一元運算符只能用于計算結果數據類型屬于數字數據類型類別的表達式。binary_operator用于定義如何組合兩個表達式以得到一個結果的運算符。binary_operator 可以是算術運算符、賦值運算符 (=)、位運算符、比較運算符、邏輯運算符、字符串連接運算符 (+)或一元運算符。ranking_windowed_function任意T-SQL排名函數。aggregate_windowed_function任意包含Transact-SQLOVER 子句的聚合函數。3.3.7 7 表達式語法說明表達式語法說明45SQL Server 2005l如果沒有支持的隱式或顯式轉換,則

57、兩個表達式將無法組合。l計算結果為字符串的表達式的排序規則都應遵循排序規則優先順序規則。l表達式結果:對于由單個常量、變量、標量函數或列名組成的簡單表達式,其數據類型、排序規則、精度、小數位數和值就是它所引用的元素的數據類型、排序規則、精度、小數位數和值。l用比較運算符或邏輯運算符組合兩個表達式時,生成的數據類型為 Boolean,并且值為下列類型之一:TRUE、FALSE或UNKNOWN。l用算術運算符、位運算符或字符串運算符組合兩個表達式時,生成的數據類型取決于運算符。l由多個符號和運算符組成的復雜表達式的計算結果為單值結果。由多個符號和運算符組成的復雜表達式的計算結果為單值結果。生成的表

58、達式的數據類型、排序規則、精度和值由進行組合的兩個表達式決定,并按每次兩個表達式的順序遞延,直到得出最后結果。表達式中元素組合的順序由表達式中運算符的優先級決定。3.3.7 7 表達式計算結果表達式計算結果46SQL Server 2005lT-SQL提供稱為控制流語言的特殊關鍵字,用于控制T-SQL語句、語句塊和存儲過程的執行流。l這些關鍵字可用于臨時T-SQL語句、批處理和存儲過程中。l控制流語言使用與程序設計相似的構造使語句得以互相連接、關聯和相互依存。l不使用控制流語言,則各T-SQL語句按其出現的順序分別執行。3.3.8 8 控制流控制流47SQL Server 2005lBEGIN

59、 ENDBEGIN END語句用于將多個語句用于將多個T-SQLT-SQL語句組合為一個邏輯塊。語句組合為一個邏輯塊。l當控制流語句執行一個包含兩條或兩條以上當控制流語句執行一個包含兩條或兩條以上T-SQLT-SQL語句的語句塊時,可以語句的語句塊時,可以使用使用BEGINBEGIN和和ENDEND語句。語句。l其語法格式如下:其語法格式如下: BEGINBEGIN 命令行命令行 | | 程序塊程序塊 END ENDlBEGIN和END語句必須成對使用,BEGIN或END語句均不能單獨使用。BEGIN語句行后為T-SQL語句塊。最后,END 語句行指示語句塊結束。BEGIN.END 語句塊允許

60、嵌套。lBEGINBEGIN和和ENDEND語句主要用于下列情況:語句主要用于下列情況:1)WHILE 循環需要包含語句塊;2)CASE 函數的元素需要包含語句塊;3)IF或ELSE子句需要包含語句塊。3.3.8 8 控制流控制流-BEGIN BEGIN END END48SQL Server 2005IFELSE的語法格式如下: IF IF | | ELSE ELSE | | IF 語句用于條件的測試。結果流的控制取決于是否指定了可選的 ELSE 語句: (1)(1)指定指定 IF IF 而無而無 ELSEELSE:IF 語句取值為 TRUE 時,執行 IF 語句后的語句或語句塊。IF 語句取值為 FALSE 時,跳過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論