SQL日常總結(SQL Server)

2021-10-07 01:53:56 字數 3813 閱讀 9608

變數分為區域性變數和全域性變數

@是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 的任務完成了再開始做其...