Transact-SQL語言是SQL Server爲用戶提供的一種編程語言,是對標準SQL的實現和擴展,它具備標準SQL的主要特色,html
同時增長了變量、運算符、函數和流程控制等語言元素,使得其功能更增強大。sql
1.批處理,什麼是批處理數據庫
所謂 "批" 是從客戶機傳遞到服務器上的一組完整的數據的sql指令。編程
做用:服務器
只是通知查詢分析器有多少語句包含在當前批,查詢分析器將兩個Go之間的語句組成一個字符串交給服務器去執行。編程語言
當前的批處理語句出現錯誤不會影響下一個批處理ide
2.sql 中的變量函數
變量的聲明:編碼
declare 變量名 數據類型 [,變量名 數據類型]spa
注意:變量名前必須加@符號
變量的賦值:
單個賦值:set 變量名=值
多個賦值:select 變量名=值 [,變量名 =值]
將查詢出的結果賦值:select 變量名=列名1 [,變量名 =列名..] from 表名 [ where .....]
經常使用的系統變量(全局變量):
@@ERROR:返回執行上一條T-sql 語句所返回的錯誤號
@@IDENTITY:返回最近一次插入的identity列的值
@@PROCID:返回當前存儲過程的Id標識
@@REMSERVER:返回在登陸記錄中記載遠程SQL server服務器的名字
@@SPID:返回當前服務器進程的Id標識
@@TRANCOUNT:返回當前鏈接中,處於活動狀態事務的數目
@@VERSION:返回當前SQL server服務器的安裝日期、版本、處理器類型
@@TOTAL_ERRORS:返回自SQLServer服務器啓動後,所遇到的讀寫總數
@@ROWCOUNT:返回上一條SQL語句所影響到數據行的數目
注意:系統變量是隻讀的,不能進行修改或賦值操做,通常是將系統變量賦值給局部變量(也就是咱們自定的變量)來使用的
3.控制流程語句
1. IF...ELSE條件判斷語句
語法格式:
IF 判斷的條件
表達式|SQL1語句
ELSE
表達式|SQL2
例如,根據學號來判斷student數據庫的考試成績(Exam)是否有記錄
Declare @stuNo varchar(30) set @stuNo ='135147' IF (SELECT COUNT(*) FROM Exam where stuNo=@stuNo)=0 begin PRINT ('學號爲'+@stuNo+'學員沒有考試成績記錄') end Else begin PRINT ('學號爲'+@stuNo+'學員參加了考試,有成績記錄') end
**PRINT:是在屏幕上顯示輸出的信息,beggin - end 至關於其餘語言裏面的{ }(用於執行多個表達式語句)
2. CASE 語句
(1)簡單表達式
CASE 表達式
WHEN 與條件比較的值 THEN 表達式
[WHEN ...N.... THEN .... ]
[ELSE 條件都不成立時要執行的表達式]
END
eg:
SELECT stuNo 學號 ,stuName 姓名,stuAge, 年齡, case stuSex when '男' then '先生' when '女' then '女士' else '未知' end '稱呼'
from Persons
(2)選擇表達式
CASE
WHEN 比較的表達式 THEN 表達式
[WHEN ..N ... THEN ... ]
[ELSE 條件都不成立時要執行的表達式]
END
若是比較的表達式爲true ,就執行THEN 裏面的表達式
eg:
select examno 考號,stuno 學號,score 分數 , case when score<60 then 'D' when score<70 then 'C' when score<80 then 'B' when score<90 then 'A' end '等級' from Exam
3.WHILE循環語句
語法:
WHILE 表達式
Begin
//T-sql語句
【BREAK】
【CONTINUE】
End
當表達式的結果爲真時,服務器加將重複執行該循環裏面的T-sql語句
【BREAK】的做用就是無條件的結束該循環,並開始執行緊跟着End後面的語句。
【CONTINUE】的做用就是跳過本次循環,開始執行下一次循環。
eg:將不及格的筆試分數提高到2分,並在存在的最低分不低於60分的狀況下,跳出循環
1 declare @score float 2 3 set @score=0 4 5 while exists (select * from Exam where score<60) 6 7 begin 8 9 update Exam set score+=2 where score<60 10 11 select @score=MIN(score) from Exam 12 13 if @score<60 14 15 continue 16 17 else 18 19 break; 20 21 end
4.函數
1.數學函數
ABS(數值表達式) :求絕對值,返回數值類型表達式的絕對值 例如: select ABS(-45.3)
ASCII(字符型表達式):求ASCII碼函數,返回該字符對應的ASCII數字 例如: select ASCII('h')
AVG([ALL|DISTINCT]表達式) :求平均值 例如:select AVG(score) from Exam
COUNT([ALL|DISTINCT]表達式|*) 統計數量 例如: select count(*) from Exam
CEILING(數值型表達式):上舍。返回最小的大於或等於給定數值型表達式的整數值。
FLOOR(數值型表達式):下舍。返回最大的小於或等於給定數值表達式的整數值。
POWER(數值型表達式1,數值型表達式2):乘方運算函數。進行乘方運算,POWER(2,3)表示2的3次方。
PI():求圓周率。不使用參數
SQRT
ROUND(數值型表達式,整數):四捨五入,將數值表達式四捨五入成整數指定精度的形式。
RAND (整型表達式):產生隨機數。返回一個0和1之間的隨機數。
2.字符串函數
---轉發至:https://www.cnblogs.com/ruhaoren/p/12758965.html
SELECT ASCII('ABC');--計算字符串第一個字符的ASCII值 SELECT CHAR(65);--把給定ASCII編碼轉換成字符 SELECT LOWER('AbC');--全轉換爲小寫 SELECT UPPER('aBc');--全轉換爲大寫 SELECT LTRIM(' AAA');--去掉左邊的空格 SELECT RTRIM('AAA ');--去掉右邊的空格 SELECT LEN(' ABC ');--計算字符個數,不包含後面的空格 SELECT LEFT('ABCDEFG',3);--從左邊返回指定個數的字符 SELECT RIGHT('ABCDEFG',3);--從右邊返回指定個數的字符 SELECT SUBSTRING('ABCDEFG',3,2);--從第三個字符開始返回2個字符 SELECT CHARINDEX('A', 'CCBBAA'); --返回第一個參數字符串在指定字符串中的位置 SELECT REPLACE('AABBCC','A','D'); --用第三個參數替換第一個參數中的第二個參數所指定字符串
3.日期函數
select GETDATE() --獲取當前系統時間 select DATENAME(YEAR,GETDATE()) --返回日期年份部分 select DATEADD(DAY,1,GETDATE()) --返回在日期天數部分加一的日期 select DATEDIFF(YEAR,'2000-1-1',GETDATE()) --返回兩個日期年份的差值 select DAY(GETDATE()) --返回天數部分 select MONTH(GETDATE()) --返回月份 select YEAR(GETDATE()) --返回年份