1. 程式人生 > >數據庫——SQL SERVER Transact-SQL 程序設計

數據庫——SQL SERVER Transact-SQL 程序設計

count ssi col 數據庫服務 其中 指定 cno 控制語句 print

什麽是Transact-SQL?

標準SQL不支持過程化控制, 不能完成復雜的功能.
T-SQL是過程化SQL語言, 是SQL的擴展
增加了過程化語句 (變量,賦值,分支,循環...)
是數據庫服務器端的編程,不同於客戶端的應用程序
不是標準語言 (ORACLE中稱為PL/SQL)
作用:
編寫批處理、存儲過程,函數,觸發器

一 SQL-SERVER批處理

技術分享圖片

下面的示例創建兩個批處理。

USE STUDB          --這是使用STUDB數據庫
GO               

DECLARE @RS int                 /* 定義變量@RS 
*/ SET @RS = (SELECT COUNT(*) /* 變量賦值 */ FROM STUDENT WHERE SDEPT=CS ) PRINT 計科學院學生人數 + CAST(@RS AS char (3)) GO

用GO 命令結束一個批處理
兩種類型的註釋方式
一般保存到批處理文件中,以後打開執行,文件名後綴為.SQL

控制語句

技術分享圖片

BEGIN...END

BEGIN...END:一組要執行的 T-SQL 語句可以包含在 BEGIN...END 中。相當於C語言的復合語句{ }
語法:

BEGIN
{ statement | statement_block } END

其中,statement 為語句,statement_block 為語句塊。

IF...ELSE

IF...ELSE:可以根據指定的條件來執行不同的SQL 語句。

語法:

IF Boolean_expression 
    { sql_statement|statement_block } 
ELSE 
    { sql_statement|statement_block } 

IF 語句示例:

IFSELECT COUNT(*) FROM
SC WHERE CNO=1 )>20--單值子查詢可以當做表達式 BEGIN …… END ELSE BEGIN …… END

WHILE 循環

WHILE:可以根據某些條件來執行一條 SQL 語句或一組語句。只要指定的條件為真,則重復執行該語句。

語法:

WHILE Boolean_expression    
{ 
      statement | statement_block 
}   
      BREAK     
{ 
      statement | statement_block 
}   
     CONTINUE 

例題:
給1號課加分,如果平均分少於 75,每人加1分,如果最高分已經達到95,則停止加分 。

USE STUDB    
GO 
WHILE (SELECT AVG(GRADE) FROM SC WHERE CNO=1) < 75 --單值子查詢可以當做表達式
BEGIN                           --循環體用BEGIN END
  IF (SELECT MAX(grade) FROM SC WHERE CNO=1) >= 95  
      BREAK  
  UPDATE SC 
    SET GRADE=GRADE+1 WHERE CNO=1
END

PRINT 調整完成!
GO

變量

兩種類型的變量:
全局變量
全局變量是SQL Server系統內部使用的變量,任何程序均可調用。
局部變量
自定義變量, 作用於局部

全局變量:


技術分享圖片

SQL Server 中的全局變量都用‘@@‘ 標記作為前綴。

數據庫——SQL SERVER Transact-SQL 程序設計