Transact-SQL語言_第1頁
Transact-SQL語言_第2頁
Transact-SQL語言_第3頁
Transact-SQL語言_第4頁
Transact-SQL語言_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、Transact-SQL語言1Transact-SQL語言概述Transact-SQL語言是Microsoft公司在關系型數據庫管理系統SQL Server中實現一種計算機高級語言,是微軟對SQL的擴展。Transact-SQL語言具有SQL的主要特點,同時增加了變量、運算符、函數、流程控制和注釋等語言元素,使得其功能更加強大。Transact-SQL語言對SQL Server十分重要,SQL Server中使用圖形界面能夠完成的所有功能,都可以利用Transact-SQL語言來實現。使用Transact-SQL語言操作時,與SQL Server通信的所有應用程序都通過向服務器發送Transa

2、ct-SQ語句來進行,而與應用程序的界面無關。在Transact-SQL語言中,標準的SQL語句暢通無阻。Transact-SQL也有類似于SQL語言的分類,不過做了許多擴充。2Transact-SQL語言基礎2.1 常量與變量2.1.1 常量常量,也稱為文字值或標量值,是表示一個特定數據值的符號。常量的格式取決于它所表示的值的數據類型。字符串常量字符串常量括在單引號內。如果將 QUOTED_IDENTIFIER 選項設置成 OFF,則字符串也可以使用雙引號括起來,但SQL Server中SET QUOTED_IDENTIFIER ON為默認設置。我們建議使用單引號。如果單引號中的字符串包含一

3、個嵌入的引號,可以使用兩個單引號表示嵌入的單引號。對于嵌入在雙引號中的字符串則沒有必要這樣做。以下是字符串的示例:'Cincinnati''O''Brien''Process X is 50% complete.''The level for job_id: %d should be between %d and %d.'"O'Brien"空字符串用中間沒有任何字符的兩個單引號表示。注意: 大于 8000 字節的字符常量為 varchar(max) 類型的數據。Unicode 字符串Un

4、icode 字符串的格式與普通字符串相似,但它前面有一個 N 標識符(N 代表 SQL-92 標準中的區域語言)。N 前綴必須是大寫字母。例如,'Michél' 是字符串常量而 N'Michél' 則是 Unicode 常量。對于字符數據,存儲 Unicode 數據時每個字符使用 2 個字節,而不是每個字符 1 個字節。注意: 大于 8000 字節的 Unicode 常量為 nvarchar(max) 類型的數據。二進制常量二進制常量具有前輟 0x 并且是十六進制數字字符串。這些常量不使用引號括起。下面是二進制字符串的示例:0xAE0x12E

5、f0x69048AEFDD010E0x (empty binary string)例:declare a intset a= 0x10print a注意: 大于 8000 字節的二進制常量為 varbinary(max) 類型的數據。bit 常量bit 常量使用數字 0 或 1 表示,并且不括在引號中。如果使用一個大于 1 的數字,則該數字將轉換為 1。datetime 常量datetime 常量使用特定格式的字符日期值來表示,并被單引號括起來。下面是 datetime 常量的示例:'December 5, 1985''5 December, 1985''

6、;851205' -其中的0不能省略'12/5/98'下面是時間常量的示例:'14:30:24''04:24 PM'Integer(int) 常量integer 常量以沒有用引號括起來并且不包含小數點的數字字符串來表示。integer 常量必須全部為數字;它們不能包含小數。下面是 integer 常量的示例:18942decimal 常量decimal 常量由沒有用引號括起來并且包含小數點的數字字符串來表示。下面是 decimal 常量的示例:1894.12042.0float 和 real 常量float 和 real 常量使用科學記數

7、法來表示。下面是 float 或 real 值的示例:101.5E50.5E-2money 常量money 常量以前綴為可選的小數點和可選的貨幣符號的數字字符串來表示。money 常量不使用引號括起。下面是 money 常量的示例:$12$542023.14¥30uniqueidentifier 常量uniqueidentifier 常量是表示 GUID 的字符串。可以使用字符或二進制字符串格式指定。以下示例都指定相同的 GUID:'6F9619FF-8B86-D011-B42D-00C04FC964FF'0xff19966f868b11d0b42d00c04fc964ff2.

8、1.2 變量變量對于一種語言來說是必不可少的組成部分。Transact-SQL語言允許使用兩種變量:一種是用戶自己定義的局部變量(Local Variable),另一種是系統提供的全局變量(Global Variable)。(1) 局部變量局部變量使用戶自己定義的變量,它的作用范圍近在程序內部。通常只能在一個批處理中或存儲過程中使用,用來存儲從表中查詢到的數據,或當作程序執行過程中暫存變量使用。局部變量使用DECLARE語句定義,并且指定變量的數據類型,然后可以使用SET或SELECT語句為變量初始化;局部變量必須以“”開頭,而且必須先聲明后使用。其聲明格式如下:DECLARE 變量名 變量類

9、型,變量名 變量類型其中變量類型可以是SQL Server支持的所有數據類型,也可以是用戶自定義的數據類型。注意:l 第一次聲明變量時,其值設置為 NULL。l 局部變量不能使用“變量=變量值”的格式進行初始化,必須使用SELECT或SET語句來設置其初始值。初始化格式如下:SELECT 局部變量=變量值SET 局部變量=變量值l 如果聲明字符型的局部變量,一定要在變量類型中指明其最大長度,否則系統認為其長度為1。例:declare find nvarchar(10)set find='李%'select * from student where sName like find

10、l 若要聲明多個局部變量,請在定義的第一個局部變量后使用一個逗號,然后指定下一個局部變量名稱和數據類型。例 DECLARE LastName nvarchar(30), FirstName nvarchar(20), StateProvince nchar(2);l 變量的作用域就是可以引用該變量的 Transact-SQL 語句的范圍。變量的作用域從聲明變量的地方開始到聲明變量的批處理或存儲過程的結尾。例如,下面的腳本存在語法錯誤,因為在一個批處理中引用了在另一個批處理中聲明的變量:USE AdventureWorks;GODECLARE MyVariable int;SET MyVaria

11、ble = 1;- Terminate the batch by using the GO keyword.GO - MyVariable has gone out of scope and no longer exists.- This SELECT statement generates a syntax error because it is- no longer legal to reference MyVariable.SELECT EmployeeID, NationalIDNumber, TitleFROM HumanResources.EmployeeWHERE Employe

12、eID = MyVariable;l 變量具有局部作用域,只在定義它們的批處理或過程中可見。在下面的示例中,為執行 sp_executesql 創建的嵌套作用域不能訪問在更高作用域中聲明的變量,從而返回錯誤。DECLARE MyVariable int;SET MyVariable = 1;EXECUTE sp_executesql N'SELECT MyVariable' - this produces an errorl 變量也可以通過SELECT列表中當前所引用的值賦值。例:USE AdventureWorks;GODECLARE EmpIDVariable int;SE

13、LECT EmpIDVariable = MAX(EmployeeID) /此時就賦該列的最大值FROM HumanResources.Employee;SELECT EmpIDVariableGOl 如果 SELECT 語句返回多行而且變量引用一個非標量表達式,則變量被設置為結果集最后一行中表達式的返回值。例如,在此批處理中將 EmpIDVariable 設置為返回的最后一行的 EmployeeID 值,此值為 1:USE AdventureWorks;GODECLARE EmpIDVariable int;SELECT EmpIDVariable = EmployeeID /此時返回多行,

14、取最后一行的值,只是賦值FROM HumanResources.Employee ORDER BY EmployeeID DESC;SELECT EmpIDVariable; /此句就是將滿足的值查詢出來GO(2) 全局變量全局變量是SQL Server 2000系統內部使用的變量,起作用范圍并不局限于某一程序,而是任何程序均可隨時調用。全局變量通常存儲一些SQL Server 2000的配置設置值和效能統計數據。用戶可在程序中用全局變量來測試系統的設定值或者Transact_SQL命令執行后的狀態值。引用全局變量時,全局變量的名字前面要有兩個標記符“”。不能定義與全局變量同名的局部變量。從S

15、QL Server 7.0開始,全局變量就以系統函數的形式使用。全局變量的符號及其功能如下表所示。全局變量及其功能全局變量功  能CONNECTIONS自SQL Server 2000最近一次啟動以來登錄或試圖登錄的次數CPU_BUSY自SQL Server 2000最近一次啟動以來CPU Server的工作時間CURRSOR_ROWS返回在本次連接最新打開的游標中的行數DATEFIRST返回SET DATEFIRST參數的當前值DBTS數據庫的惟一時間標記值ERROR系統生成的最后一個錯誤,若為0則成功FETCH_STATUS最近一條FETCH語句的標志IDENTITY保存最近一次

16、的插入身份值IDLE自CPU服務器最近一次啟動以來的累計空閑時間IO_BUSY服務器輸入輸出操作的累計時間LANGID當前使用的語言的IDLANGUAGE當前使用語言的名稱LOCK_TIMEOUT返回當前鎖的超時設置MAX_CONNECTIONS同時與SQL Server 2000相連的最大連接數量MAX_PRECISION十進制與數據類型的精度級別NESTLEVEL當前調用存儲過程的嵌套級,范圍為016OPTIONS返回當前SET選項的信息PACK_RECEIVED所讀的輸入包數量PACKET_SENT所寫的輸出包數量PACKET_ERRORS讀與寫數據包的錯誤數RPOCID當前存儲過程的I

17、DREMSERVER返回遠程數據庫的名稱ROWCOUNT最近一次查詢涉及的行數SERVERNAME本地服務器名稱SERVICENAME當前運行的服務器名稱SPID當前進程的IDTEXTSIZE當前最大的文本或圖像數據大小TIMETICKS每一個獨立的計算機報時信號的間隔(ms)數,報時信號為31.25ms或1/32sTOTAL_ERRORS讀寫過程中的錯誤數量TOTAL_READ讀磁盤次數(不是高速緩存)TOTAL_WRITE寫磁盤次數TRANCOUNT當前用戶的活動事務處理總數VERSION當前SQL Server的版本號例:delete from student where sScore

18、is nullselect ROWCOUNT /可見,在T-SQL中select 列 是顯示列。例:select IDENTITY2.2 運算符運算符是一種符號,用來指定要在一個或多個表達式中執行的操作。2.2.1 算術運算符+(加)、-(減)、*(乘)、/(除)、%(求余)2.2.2 賦值運算符等號 (=) 是唯一的 Transact-SQL 賦值運算符,只要是=就表示賦值語句例:DECLARE MyCounter INT;SET MyCounter = 1;2.2.3 位運算符& (位與) 、|(位或) 、(位異或)2.2.4 比較運算符比較運算符測試兩個表達式是否相同。除了 te

19、xt、ntext 或 image 數據類型的表達式外,比較運算符可以用于所有的表達式。下表列出了 Transact-SQL 比較運算符。運算符 含義 =(等于) 等于> (大于) 大于< (小于) 小于>=(大于等于) 大于等于<=(小于等于) 小于等于<> (不等于) 不等于!=(不等于) 不等于(非 ISO 標準)!<(不小于)不小于(非 ISO 標準)!>(不大于)不大于(非 ISO 標準)2.2.5 邏輯運算符邏輯運算符對某些條件進行測試,以獲得其真實情況。邏輯運算符和比較運算符一樣,返回帶有 TRUE、FALSE 或 UNKNOWN 值

20、的Boolean 類型數據。與其他 SQL Server 數據類型不同,Boolean 數據類型不能被指定為表列或變量的數據類型,也不能在結果集中返回。2.2.6 字符串串聯運算符加號 (+) 是字符串串聯運算符,可以用它將字符串串聯起來。其他所有字符串操作都使用字符串函數(如 SUBSTRING)進行處理。2.3 表達式表達式是標識符、值和運算符的組合,SQL Server 可以對其求值以獲取結果。訪問或更改數據時,可在多個不同的位置使用數據。例如,可以將表達式用作要在查詢中檢索的數據的一部分,也可以用作查找滿足一組條件的數據時的搜索條件。在以下示例中,查詢使用了多個表達式。例如,Name、

21、SUBSTRING、ProductNumber、ListPrice 和 1.5 都是表達式。USE AdventureWorks;GOSELECT Name, SUBSTRING('This is a long string', 1, 5) AS SampleText, ProductNumber, ListPrice * 1.5 AS NewPriceFROM Production.Product;3語句3.1 注釋語句注釋是程序代碼中不執行的文本字符串(也稱為備注)。注釋可用于對代碼進行說明或暫時禁用正在進行診斷的部分 Transact-SQL 語句和批。使用注釋對代碼進行

22、說明,便于將來對程序代碼進行維護。注釋通常用于記錄程序名、作者姓名和主要代碼更改的日期。注釋可用于描述復雜的計算或解釋編程方法。SQL Server 支持兩種類型的注釋字符:l -(雙連字符)。這些注釋字符可與要執行的代碼處在同一行,也可另起一行。從雙連字符開始到行尾的內容均為注釋。對于多行注釋,必須在每個注釋行的前面使用雙連字符。/* . */(正斜杠-星號字符對)。這些注釋字符可與要執行的代碼處在同一行,也可另起一行,甚至可以在可執行代碼內部。開始注釋對 (/*) 與結束注釋對 (*/) 之間的所有內容均視為注釋。對于多行注釋,必須使用開始注釋字符對 (/*) 來開始注釋,并使用結束注釋字

23、符對 (*/) 來結束注釋。例:USE AdventureWorks;GO- Single line comment.SELECT EmployeeID, TitleFROM HumanResources.Employee;GO/* First line of a multiple-line comment. Second line of a multiple-line comment. */SELECT Name, ProductNumber, ColorFROM Production.Product;GO- Using a comment in a Transact-SQL stateme

24、nt- during diagnosis.SELECT ContactID, /* FirstName, */ LastName /內部部分注釋。FROM Person.Contact;- Using a comment after the code on a line.USE AdventureWorks;GOUPDATE Production.ProductSET ListPrice = ListPrice * .9; - Reduce price to build market share.GO3.2 批處理GOGo用于向 SQL Server 實用工具發出一批 Transact-SQL

25、 語句結束的信號。語法:Go count其中count為一個正整數,表示GO 之前的批處理將執行指定的次數。注:l GO 不是 Transact-SQL 語句;它是可由 sqlcmd 和 osql 實用工具以及 SQL Server Management Studio 代碼編輯器識別的命令。l GO 命令和 Transact-SQL 語句不能在同一行中。但在 GO 命令行中可包含注釋。l 用戶必須遵照使用批處理的規則。例如,在批處理中的第一條語句后執行任何存儲過程必須包含 EXECUTE 關鍵字。局部(用戶定義)變量的作用域限制在一個批處理中,不可在 GO 命令后引用。例:USE Advent

26、ureWorks;GODECLARE MyMsg VARCHAR(50)SELECT MyMsg = 'Hello, World.' /或這用set 賦值GO - MyMsg is not valid after this GO ends the batch.- Yields an error because MyMsg not declared in this batch.PRINT MyMsgGOSELECT VERSION;- Yields an error: Must be EXEC sp_who if not first statement in - batch.sp

27、_whoGO3.3 語句塊BEGINENDBEGINEND包括一系列的 Transact-SQL 語句,從而可以執行一組 Transact-SQL 語句。BEGIN 和 END 是控制流語言的關鍵字。例:USE AdventureWorks;GOBEGIN TRANSACTION;GOIF TRANCOUNT = 0BEGINSELECT * from Person.Contact WHERE LastName = 'ADAMS'ROLLBACK TRANSACTIONPRINT N'Rolling back the transaction two times woul

28、d cause an error.' /也就是說,如果IF下面沒有用到語句塊Bigin/end 則IF/ELSE條件下只會執行最后一天語句:print ENDROLLBACK TRANSACTIONPRINT N'Rolled back the transaction.'GO3.4 條件語句IFELSE指定 Transact-SQL 語句的執行條件。語法IF Boolean_expression sql_statement | statement_block ELSE sql_statement | statement_block 參數Boolean_expressio

29、n 返回 TRUE 或 FALSE 的表達式。如果布爾表達式中含有 SELECT 語句,則必須用括號將 SELECT 語句括起來。 sql_statement | statement_block 任何 Transact-SQL 語句或用語句塊定義的語句分組。除非使用語句塊,否則 IF 或 ELSE 條件只能執行其后的一條 Transact-SQL 語句。注意:T-SQL中if-else是沒有end 的在if條件中有select語句則必須加括號若要定義語句塊,必須使用控制流關鍵字 BEGIN 和 END。例:declare a intset a=10if a>0print 'a為正

30、數' /if執行一行,不加塊elseprint 'a為負數'我們經常利用if語句和exists或not exists關鍵字來判斷Select查詢結果是否有記錄。Exists是用來判斷是否存在返回行的,用In的話,只能是同一列例:判斷002號課程是否有人選修用exists或not exists來判斷數據行數if exists(select * from SelectRecord where rcID='002')print '002號課程已有人選'elseprint '002號課程還沒有人選'3.5 CASE函數CASE函數

31、用于計算條件列表并返回多個可能結果表達式之一。語法 格式一:CASE input_expression WHEN when_expression THEN result_expression .n ELSE else_result_expression END 格式二:CASE WHEN Boolean_expression THEN result_expression .n ELSE else_result_expression END例:USE AdventureWorks;GOSELECT ProductNumber, Category = CASE ProductLine WHEN &

32、#39;R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' END, NameFROM Production.ProductORDER BY ProductNumber;GO例:USE AdventureWorks;GOSELECT ProductNumber, Name, 

33、9;Price Range' = CASE WHEN ListPrice = 0 THEN 'Mfg item - not for resale' WHEN ListPrice < 50 THEN 'Under $50' WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' ELSE 'Over $1

34、000' ENDFROM Production.ProductORDER BY ProductNumber ;GO3.6 循環語句WhileWhile用于設置重復執行 SQL 語句或語句塊的條件。只要指定的條件為真,就重復執行語句。可以使用 BREAK 和 CONTINUE 關鍵字在循環內部控制 WHILE 循環中語句的執行。語法WHILE Boolean_expression sql_statement | statement_block BREAK sql_statement | statement_block CONTINUE sql_statement | statement_

35、block 參數Boolean_expression 返回 TRUE 或 FALSE 的表達式。如果布爾表達式中含有 SELECT 語句,則必須用括號將 SELECT 語句括起來。sql_statement | statement_block Transact-SQL 語句或用語句塊定義的語句分組。若要定義語句塊,請使用控制流關鍵字 BEGIN 和 END。BREAK導致從最內層的 WHILE 循環中退出。將執行出現在 END 關鍵字(循環結束的標記)后面的任何語句。CONTINUE使 WHILE 循環重新開始執行,忽略 CONTINUE 關鍵字后面的任何語句。例:在以下示例中,如果產品的平均

36、標價小于 $300,則 WHILE 循環將價格乘 2,然后選擇最高價格。如果最高價格小于或等于 $500,則 WHILE 循環重新開始,并再次將價格乘 2。該循環不斷地將價格乘 2,直到最高價格超過 $500,然后退出 WHILE 循環,并打印一條消息。USE AdventureWorks;GOWHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300BEGIN UPDATE Production.Product SET ListPrice = ListPrice * 2 SELECT MAX(ListPrice) FROM

37、Production.Product IF (SELECT MAX(ListPrice) FROM Production.Product) > $500 BREAK ELSE CONTINUEENDPRINT 'Too much for the market to bear'例:- Create the table.CREATE TABLE TestTable (cola int, colb char(3);GOSET NOCOUNT ON;GO- Declare the variable to be used.DECLARE MyCounter int;- Initia

38、lize the variable.SET MyCounter = 0;- Test the variable to see if the loop is finished.WHILE (MyCounter < 26)BEGIN; - Insert a row into the table. INSERT INTO TestTable VALUES - Use the variable to provide the integer value - for cola. Also use it to generate a unique letter - for each row. Use t

39、he ASCII function to get the - integer value of 'a'. Add MyCounter. Use CHAR to - convert the sum back to the character MyCounter - characters after 'a'. (MyCounter, CHAR( ( MyCounter + ASCII('a') ) ) ); - Increment the variable to count this iteration - of the loop. SET MyCo

40、unter = MyCounter + 1;END;GOSET NOCOUNT OFF;GO- View the data.SELECT cola, colbFROM TestTable;GODROP TABLE TestTable;GO3.7 其它語句3.7.1 Print語句Print語句用于向客戶端返回用戶定義消息。使用 PRINT 可以幫助我們排除 Transact-SQL 代碼中的故障、檢查數據值或生成報告。例:Print ABCDEFG 3.7.2 Waitfor延遲語句在達到指定時間或時間間隔之前,或者指定語句至少修改或返回一行之前,阻止執行批處理、存儲過程或事務。例:selec

41、t * from studentgowaitfor Time '19:36:30'select * from Student例:select * from studentgowaitfor delay '00:00:03'select * from Student3.7.3 TryCatch異常處理語句例:BEGIN TRYinsert into Student values('1001','王小二','d','1990/1/1',500)END TRYBEGIN CATCH print '

42、你插入的重復的學號'END CATCHGO4游標關系數據庫中的操作會對整個行集起作用。由 SELECT 語句返回的行集包括滿足該語句的 WHERE 子句中條件的所有行。這種由語句返回的完整行集稱為結果集。應用程序,特別是交互式聯機應用程序,并不總能將整個結果集作為一個單元來有效地處理。這些應用程序需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的對結果集的一種擴展。游標的作用: l 允許定位在結果集的特定行。l 從結果集的當前位置檢索一行或一部分行。l 支持對結果集中當前位置的行進行數據修改。l 為由其他用戶對顯示在結果集中的數據庫數據所做的更改提供不同級別的可見性支持。l

43、 提供腳本、存儲過程和觸發器中用于訪問結果集中的數據的 Transact-SQL 語句。使用游標的步驟:1 聲明游標;2 打開游標;3 檢索游標;4 關閉游標;5 釋放游標。4.1 聲明游標聲明游標有ISO和Transact-SQL二種方式:ISO SyntaxDECLARE cursor_name INSENSITIVE SCROLL CURSOR FOR select_statement FOR READ ONLY | UPDATE OF column_name ,.n ;Transact-SQL Extended SyntaxDECLARE cursor_name CURSOR LOCA

44、L | GLOBAL FORWARD_ONLY | SCROLL STATIC | KEYSET | DYNAMIC | FAST_FORWARD READ_ONLY | SCROLL_LOCKS | OPTIMISTIC TYPE_WARNING FOR select_statement FOR UPDATE OF column_name ,.n ;上述語法中參數含義請參見SQL Server幫助文檔例:declare cur cursor for select * from student4.2 打開游標例:open cur注:打開游標后,可以使用 CURSOR_ROWS 函數在上次打開的

45、游標中接收合格行的數目。4.3 檢索游標打開游標后,我們可以使用Fetch語句檢索游標中的數據行。語法:FETCH            NEXT | PRIOR | FIRST | LAST                     | ABSOLUTE n | nvar   &

46、#160;                 | RELATIVE n | nvar                              

47、0; FROM            GLOBAL cursor_name | cursor_variable_name INTO variable_name ,.n 上述語法中參數含義請參見SQL Server幫助文檔例:declare cur cursor scrollfor select * from studentopen curfetch next from cur -下一行fetch absolute 3 from cur -第三行fetch relative -2 fro

48、m cur -當前行的前二行fetch prior from cur -上一行fetch last from cur -最后一行close curdeallocate cur例:fetch next from curwhile FETCH_STATUS=0fetch next from cur上例中的FETCH_STATUS=0表示上一個fetch語句取數據成功。例:declare sID varchar(4),sName nvarchar(4)declare cur cursor scrollfor select sId,sName from student open curfetch ne

49、xt from cur into sID,sNameselect sID,sName close curdeallocate cur4.4 關閉游標CLOSE用于關閉游標。CLOSE 將保留數據結構以便重新打開,但在重新打開游標之前,不允許提取和定位更新。必須對打開的游標發布 CLOSE;不允許對僅聲明或已關閉的游標執行 CLOSE。4.5 釋放游標DEALLOCATE用于釋放游標引用。當釋放最后的游標引用時,組成該游標的數據結構由 Microsoft SQL Server 釋放。4.6 利用游標修改數據利用游標修改數據時,首先在定義游標時要指明修改的字段,然后在update語句中指定通過游標

50、修改。例:declare cur cursor scrollfor select * from student where sSex='女'for update of sScoreopen curfetch next from curwhile FETCH_STATUS=0beginupdate Student set sScore=sScore-200 where current of curfetch next from curendclose curdeallocate curdeclare i int,Wage money,Tax moneydeclare cur cu

51、rsor for select eID,eWage from Employeeopen curfetch next from cur into i,wagewhile FETCH_STATUS=0begin set Wage=Wage-2000 if Wage<=0 set Tax=0 else if Wage>0 and Wage<=1000 set Tax=(Wage)*0.05 else if Wage>1000 and Wage<=2000 set Tax=50+(Wage-1000)*0.1 else if Wage>2000 set Tax=15

52、0+(Wage-2000)*0.15 update employee set eTax=Tax where eID=i fetch next from cur into i,wageendclose curdeallocate cur 5常用函數5.1 轉換函數1CAST()CAST()函數將一種數據類型的表達式轉換為另一種數據類型的表達式。語法:2CONVERT()CAST ( expression AS data_type (length ) )例:select sName+'('+cast(sScore as varchar(10)+')' from St

53、udent下列代碼將成績為Null值的數據項顯示不0分。select sName+'('+(case when sScore IS NULL then '0'else cast(sScore as varchar(10)end)+')' from StudentCONVERT()函數將一種數據類型的表達式轉換為另一種數據類型的表達式。語法:CONVERT ( data_type ( length ) , expression , style )例:select sName +'(' + convert(nvarchar(10),s

54、BirthDate,20) + ')' from Student有關參數的style具體情況,請參見SQL Server幫助文檔。ALTER TABLE dm_eco ALTER COLUMN ec_econame varchar(500) /修改字符串的長度;5.2 字符串函數1LEN(character_expression)返回字符表達式中的字符數。如果字符串中包含前導空格和尾隨空格,則函數會將它們包含在計數內。LEN 對相同的單字節和雙字節字符串返回相同的值。例:select max(LEN(sName) from Student2DATALENGTH ( expres

55、sion )返回用于表示任何表達式的字節數。例:declare a nvarchar(10)set a='abc'select DATALENGTH(a) -顯示為3LEFT ( character_expression , integer_expression )返回字符串中從左邊開始指定個數的字符。4RIGHT(character_expression,integer_expression)返回字符表達式中從起始位置(從右端開始)到指定字符位置(從右端開始計數)的部分。5SUBSTRING ( value_expression ,start_expression , len

56、gth_expression )返回字符表達式、二進制表達式、文本表達式或圖像表達式的一部分例:SELECT x = SUBSTRING('abcdef', 2, 3); -顯示bcd6UPPER(character_expression)返回將小寫字符轉換為大寫字符后得到的字符表達式。例:select UPPER('hello')7LOWER(character_expression)返回將大寫字符轉換為小寫字符后得到的字符表達式。8SPACE ( integer_expression )返回由重復的空格組成的字符串。例:select sName+SPACE(3)+sSex from Student 9REPLICATE(character_expression,times)返回多

溫馨提示

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

評論

0/150

提交評論