SQL Server Transact-SQL 編程
T-SQL語句用于管理SQL Server數(shù)據(jù)庫引擎實(shí)例,創(chuàng)建和管理數(shù)據(jù)庫對(duì)象,以及查詢、插入、修改和刪除數(shù)據(jù)。
? 變量
???? 1、 局部變量(Local Variable)
????????? 局部變量是用戶可以自定義的變量,它的作用范圍是僅在程序內(nèi)部,在程序中通常用來儲(chǔ)存從表中查詢到的數(shù)據(jù)或當(dāng)做程序執(zhí)行過程中的暫存變量。使用局部變量必須以@開頭,而且必須用declare命令后才能使用。
?
????????? 基本語法:
聲明變量
declare
@變量名 變量類型 [@變量名 變量類型]
為變量賦值
set
@變量名 = 變量值;
select
@變量名 = 變量值;
?????????
????????? 示例:
--局部變量
declare @id char (10)--聲明一個(gè)長度的變量id
declare @age int --聲明一個(gè)int類型變量age
select
@id = 22 --賦值操作
set
@age = 55 --賦值操作
print convert ( char (10), @age) + '#' + @id
select
@age, @id
go
?
簡單hello world示例
declare @name varchar (20);
declare @ result varchar (200);
set @name = 'jack' ;
set @ result = @name + ' say: hello world!' ;
select @ result ;
?
查詢數(shù)據(jù)示例
declare @id int , @name varchar (20);
set
@id = 1;
select @name = name from student where id = @id;
select
@name;
?
select賦值
declare @name varchar (20);
select @name = 'jack' ;
select * from student where name = @name;
????????? 從上面的示例可以看出,局部變量可用于程序中保存臨時(shí)數(shù)據(jù)、傳遞數(shù)據(jù)。Set賦值一般用于賦值指定的常量個(gè)變量。而select多用于查詢的結(jié)果進(jìn)行賦值,當(dāng)然select也可以將常量賦值給變量。
????????? 注意:在使用select進(jìn)行賦值的時(shí)候,如果查詢的結(jié)果是多條的情況下,會(huì)利用最后一條數(shù)據(jù)進(jìn)行賦值,前面的賦值結(jié)果將會(huì)被覆蓋。
?
???? 2、 全局變量(Global Variable)
????????? 全局變量是系統(tǒng)內(nèi)部使用的變量,其作用范圍并不局限于某一程序而是任何程序均可隨時(shí)調(diào)用的。全局變量一般存儲(chǔ)一些系統(tǒng)的配置設(shè)定值、統(tǒng)計(jì)數(shù)據(jù)。
全局變量
select @@ identity ;--最后一次自增的值
select identity ( int , 1, 1) as id into tab from student;--將studeng表的烈屬,以/1自增形式創(chuàng)建一個(gè)tab
select * from tab;
select @@ rowcount ;--影響行數(shù)
select
@@cursor_rows;--返回連接上打開的游標(biāo)的當(dāng)前限定行的數(shù)目
select
@@error;--T-SQL的錯(cuò)誤號(hào)
select
@@procid;
?
--配置函數(shù)
set
datefirst 7;--設(shè)置每周的第一天,表示周日
select @@datefirst as '星期的第一天' , datepart(dw, getDate()) AS '今天是星期' ;
select
@@dbts;--返回當(dāng)前數(shù)據(jù)庫唯一時(shí)間戳
set language 'Italian' ;
select @@langId as 'Language ID' ;--返回語言id
select @@language as 'Language Name' ;--返回當(dāng)前語言名稱
select
@@lock_timeout;--返回當(dāng)前會(huì)話的當(dāng)前鎖定超時(shí)設(shè)置(毫秒)
select
@@max_connections;--返回SQL Server 實(shí)例允許同時(shí)進(jìn)行的最大用戶連接數(shù)
select @@MAX_PRECISION AS 'Max Precision' ;--返回decimal 和numeric 數(shù)據(jù)類型所用的精度級(jí)別
select @@SERVERNAME;-- SQL Server 的本地服務(wù)器的名稱
select
@@SERVICENAME;--服務(wù)名
select
@@SPID;--當(dāng)前會(huì)話進(jìn)程id
select @@ textSize ;
select
@@version;--當(dāng)前數(shù)據(jù)庫版本信息
?
--系統(tǒng)統(tǒng)計(jì)函數(shù)
select
@@CONNECTIONS;--連接數(shù)
select
@@PACK_RECEIVED;
select
@@CPU_BUSY;
select
@@PACK_SENT;
select
@@TIMETICKS;
select
@@IDLE;
select
@@TOTAL_ERRORS;
select
@@IO_BUSY;
select
@@TOTAL_READ;--讀取磁盤次數(shù)
select
@@PACKET_ERRORS;--發(fā)生的網(wǎng)絡(luò)數(shù)據(jù)包錯(cuò)誤數(shù)
select
@@TOTAL_WRITE;--sqlserver執(zhí)行的磁盤寫入次數(shù)
?
? 輸出語句
???? T-SQL支持輸出語句,用于顯示結(jié)果。常用輸出語句有兩種:
???? 基本語法
print
變量或表達(dá)式
select
變量或表達(dá)式
????
????? 示例
select
1 + 2;
select @@ language ;
select
user_name();
?
print
1 + 2;
print @@ language ;
print
user_name();
???? print在輸出值不少字符串的情況下,需要用convert轉(zhuǎn)換成字符串才能正常輸出,而且字符串的長度在超過8000的字符以后,后面的將不會(huì)顯示。
?
? 邏輯控制語句
???? 1、 if-else判斷語句
????????? 語法
if
<表達(dá)式>
<命令行或程序塊>
else if <表達(dá)式>
<命令行或程序塊>
else
<命令行或程序塊>
????????? 示例
if簡單示例
if
2 > 3
print '2 > 3' ;
else
print '2 < 3' ;
?
if
(2 > 3)
print '2 > 3' ;
else if (3 > 2)
print '3 > 2' ;
else
print 'other' ;
?
簡單查詢判斷
declare @id char (10),
@pid
char
(20),
@name
varchar
(20);
set @name = '廣州' ;
select @id = id from ab_area where areaName = @name;
select @pid = pid from ab_area where id = @id;
print @id + '#' + @pid;
?
if
@pid > @id
begin
print @id + '%' ;
select * from ab_area where pid like @id + '%' ;
end
else
begin
print @id + '%' ;
print @id + '#' + @pid;
select * from ab_area where pid = @pid;
end
go
????
?????? 2、 while…continue…break循環(huán)語句
????????? 基本語法
while
<表達(dá)式>
begin
<命令行或程序塊>
[
break
]
[
continue
]
<命令行或程序塊>
end
????????? 示例
--while循環(huán)輸出到
declare @i int ;
set
@i = 1;
while
(@i < 11)
begin
print
@i;
set
@i = @i + 1;
end
go
?
-- while continue 輸出到
declare @i int ;
set
@i = 1;
while
(@i < 11)
begin
if
(@i < 5)
begin
set
@i = @i + 1;
continue
;
end
print
@i;
set
@i = @i + 1;
end
go
?
-- while break 輸出到
declare @i int ;
set
@i = 1;
while
(1 = 1)
begin
print
@i;
if
(@i >= 5)
begin
set
@i = @i + 1;
break
;
end
set
@i = @i + 1;
end
go
????
???? 3、 case
????????? 基本語法
case
when <條件表達(dá)式> then <運(yùn)算式>
when <條件表達(dá)式> then <運(yùn)算式>
when <條件表達(dá)式> then <運(yùn)算式>
[
else
<運(yùn)算式>]
end
????????? 示例
select
*,
case
sex
when 1 then '男'
when 0 then '女'
else '火星人'
end as '性別'
from
student;
?
select areaName, '區(qū)域類型' = case
when areaType = '省' then areaName + areaType
when areaType = '市' then 'city'
when areaType = '區(qū)' then 'area'
else 'other'
end
from
ab_area;
????
?????? 4、 其他語句
批處理語句go
Use
master
Go
?
延時(shí)執(zhí)行,類似于定時(shí)器、休眠等
waitfor delay '00:00:03' ;--定時(shí)三秒后執(zhí)行
print '定時(shí)三秒后執(zhí)行' ;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
