Transact-SQL語言是SQL Server為用戶提供的一種編程語言,是對標準SQL的實作和擴展,它具有標準SQL的主要特點,
同時增加了變數、運算子、函式和流程控制等語言元素,使得其功能更加強大,
1.批處理,什么是批處理
所謂 "批" 是從客戶機傳遞到服務器上的一組完整的資料的sql指令,
作用:
只是通知查詢分析器有多少陳述句包含在當前批,查詢分析器將兩個Go之間的陳述句組成一個字串交給服務器去執行,
當前的批處理陳述句出現錯誤不會影響下一個批處理
2.sql 中的變數
變數的宣告:
declare 變數名 資料型別 [,變數名 資料型別]
注意:變數名前必須加@符號
變數的賦值:
單個賦值: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 ’稱呼‘
(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(float 型運算式):求指定float運算式的平方根,回傳float型的結果,
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.日期函式
GETDATE():
回傳當前的系統時間,例如:SELECT GETDATE() DATEPART(datepart,date):
以整數形式回傳給定 date 型資料的指定日期部分,一個 date 型資料日期部分的取值,
DATENAME(datepart,date):以字串形式回傳給定 date 型資料的指定日期部分,
DATEADD(datepart,number,date):在給定當日器變數指定日期部分的基礎上,加上一個整型數值,
DATEDIFF(datepart,date,enddate):回傳開始日期和結束日期在給定日期間的差值,
DAY(date):回傳指定日期 DAY 部分的數值,
MONTH(date):回傳指定日期 MONTH 部分的數值,
YEAR(date):回傳指定日期 YEAR 部分的數值,
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()) --回傳年份
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1215.html
標籤:SQL Server
下一篇:資料網站
