變數分為區域性變數和全域性變數
@是sql中標量變數開頭的必須字元,sql規定,區域性標量變數必須以@開頭,全域性標量變數以@@開頭,全域性標量變數不許宣告,直接使用即可
區域性變數的使用是先申明再賦值。而全域性變數由系統定義和維護,可以直接使用,但一般不自定義全域性變數
區域性變數的名稱必須以標記@作為字首
宣告區域性變數的語句如下:
declare @variable name(區域性變數名稱) datatype(資料型別)
區域性變數賦值有兩種方法:使用set語句或select語句
例:整型:
declare
@num
intset
@num=10
print
'num的值是:'
+convert
(nvarchar(32)
,@num
)
字串型別:(char varchar nvarchar)
declare
@name nvarchar(32)
set@name
='趙六'
print
@name
小數型別(float decimal numeric(18,0))
declare
@number
decimal(18
,2)set
@number
=1.3
print
@number
日期型別(datetime)
declare
@mydate
datetime
set@mydate
=getdate(
)print
convert
(nvarchar(32)
,@mydate
,120
)
sqlserver中的所有全域性變數都使用兩個@符號作為字首
@@identity是表示的是最近一次向具有identity屬性(即自增列)的表插入資料時對應的自增列的值,是系統定義的全域性變數。
宣告區域性變數的語句如下:
declare
@variable name(區域性變數名稱) datatype(資料型別)
區域性變數賦值有兩種方法:使用set語句或select語句
常用的幾個全域性變數:
| :------ | :------ |
| @@error | 上一條sql錯誤號 |
| @@error | 上一條sql錯誤號 |
| @@identity | 最後一次插入的標識值 |
| @@rowcount | 受上乙個sql語句影響的行數 |
| @@servicename | 該計算機上的sql服務名稱 |
| @@version | sqlserver的版本資訊 |
注:不能自己定義全域性變數,不能給全域性變數賦值
setselect
同時對多個變數賦值
不支援支援
表示式返回多個值時
出錯將返回的最後乙個值賦給變數
表示式未返回值時
變數將賦值為null
變數保持原值
declare
@stuname nvarchar(32)
select
@stuname
=studentname from student
where studentno=
23
cast()與convert()函式
基本語法:
cast(表示式 as 資料型別)
convert(資料型別[(長度)],表示式[,樣式])
二者在本質上無任何區別 唯一不同之處是:在將日期時間型別的資料轉換為字串資料時,convert()函式可以通過第三個引數指定轉換後字元資料的顯示格式不同。
case
when isnumeric(f.fielddata)=1
then cast(f.fielddata as money)
else
0end
1:順序結構控制語句
begin
語句或語句塊
end
類似於c#語言的「{}」表示語句塊的開始和結束
2:if-else條件語句
3:while迴圈語句
注:在sql 中,只有while一種迴圈,沒有do-while和for迴圈4:case多分支語句
case-end語句計算一組條件表示式,並返回其中乙個符合條件的結果
基本語法:
case
when 條件1
then 結果1
when 條件2
then 結果2
[else 其他結果]
end
這是某次寫的複雜儲存過程
--if語句 判斷表變數是否存在if(
exists
(select
*from tempdb.
.sysobjects where id = object_id(n'tempdb..#node1'
)and
type
='u'))
begin
--清空表 #:表變數
truncate
table
#node1
insert
into
#node1 select * from node
select
*into
#node1 from node
end--游標
declare sale_cursor cursor
for--游標範圍
select m.metaid from metabond mb left
join meta m
on mb.metaid = m.metaid
where bonddict =
272and metastate <>
3and mb.activeid =
@customerid
order
by m.metaid asc
--開啟游標--
open sale_cursor
--開始迴圈游標變數--
fetch
next
from sale_cursor into
@salemeta
while @@fetch_status=0
begin
--要在迴圈裡執行的sql
--轉到下乙個游標,否則會死迴圈
fetch
next
from sale_cursor into
@salemeta
end--關閉游標
close sale_cursor
--釋放游標
deallocate sale_cursor
set
identity_insert 表名 on
--允許對自增列id插入指定資料
--insert or update 語句
setidentity_insert 表名 off
--關閉對自增列id插入指定資料
日常SQL總結
case length cast bal.asset acct as string when 12then 資金賬戶 when 16then 理財帳戶 else 其他 end case後可以加入條件在寫when,length string 為string的字元長度 length 括號裡不僅可以是st...
Sql使用日常總結
乙個字段裡面的值是 a,b,c 分成三行讀取 with t1 as select a,b,c c1 from dual select distinct regexp substr c1,1,level c1 from t1connect by level length c1 length repla...
總結 日常總結
最近變得浮躁了,學不進了,那就寫總結吧。關於刷題 從去年十一月份到現在,感覺唯一堅持的意見事情就是刷力扣了。四個多月,寫了六百多道題,大概有四五題一天,然後也在堅持參加周賽。很多時候,有些事情成了習慣,那麼也就不需要去堅持了。比如說現在,每天都是先把每日一題和劍指 offer 的任務完成了再開始做其...