SQL儲存過程學習筆記

2022-03-26 03:27:58 字數 4881 閱讀 4010

一、建立臨時表

1.系統

例子1:建立tempcategory,每一列定義在括號中;

if

object_id('

tempdb..#tempcategory

') is

notnull

drop

table

#tempcategory

create

table

#tempcategory(

num

int,

cgname

varchar(50

), cgid

int,

partnerid

int,

updtime

datetime

, operator

varchar(50

) )

2.with as

例子1:建立臨時表,名稱:temptable 。往臨時表中填充資料;

with temptable as

(select a.*

from category a , f_cid(@cgid) b where a.cgid =

b.id )

select cgtype,count(1) as typecount from temptable group

by cgtype

例子2:

with temptable as

( select keyid,title,d3key,titlelink,modifydate,pubdate,revokedate,pcimageurl,istop,sortindex,cateid,bpushinfo,abstrats,row_number() over(order

by sortindex desc) as row from information where pubdate >=

'2013-03-12

'and pubdate <

'2013-03-13

'and cateid =

1),

temptable2

as(

select

*from temptable where istop=

1union

allselect

*from temptable where

getdate()< revokedate and

getdate()>pubdate and istop <>

1union

allselect

*from temptable where

getdate()> revokedate and istop <>1)

select (select

count(1) from temptable2) as totalcount,keyid,title,d3key,titlelink,modifydate,pubdate,revokedate,pcimageurl,istop,sortindex,cateid,bpushinfo,abstrats,row from temptable2 where row between

1and

5

說明:第一部分:建立臨時表temptable ,往裡面填充資料;

第二部分: 建立臨時表temptable2,往裡面填充篩選後的temptable 的資料;

具體:temptable2對temptable中的資料重新排序,然後 union all 連線順序如下:

1、istop=1(置頂資訊);

2、 getdate()< revokedate and getdate()>pubdate and istop <> 1(非置頂資訊中大於發布時間而小於下線時間的資訊,即今天正在向線上的資訊;)

3、getdate()> revokedate and istop <> 1(非指定資訊中當前日期大於下線時間,即已經下線的資訊)

二、sql分頁

alter

procedure

[dbo

].[categorylist_firstlevellist

]@cgname

varchar(50

),

@pagesize

int,

@pageindex

int,

@total

intoutput

asbegin

declare

@strsql

varchar(3000),@strcondition

varchar(200

),

@subsql

varchar(500),@frmindex

int,@endindex

int,@partnerid2

intset

@strcondition='

where cgtype=1

'if(@cgname

!=''

and@cgname

isnot

null

)

set@strcondition

=@strcondition+'

and cgname like ''%

'+@cgname+'

%'''

set@frmindex

=(@pageindex

-1)*

@pagesize

set@endindex

=@pageindex

*@pagesize

set@subsql='

select row_number() over(order by cid) as num,cgname,cgid,partnerid,updtime,operator from category

'set

@strsql='

select * from ('+

@subsql

+@strcondition+'

) tb'if

object_id('

tempdb..#tempcategory

') is

notnull

drop

table

#tempcategory

create

table

#tempcategory(

num

int,

cgname

varchar(50

), cgid

int,

partnerid

int,

updtime

datetime

, operator

varchar(50

) )

print(@strsql

)

insert

into #tempcategory exec(@strsql

) --往臨時表中填充資料(執行sql語句)

select

@total

=count(1) from

#tempcategory

select cgname,cgid,c.ptid,isnull(c.partner,'') as ptname,c.[

status

]as pstatus,updtime,operator from

#tempcategory a

left

join partners c on a.partnerid=

c.ptid

where num>

@frmindex

and num<=

@endindex

order

bynum

end

三、事務

alter

procedure

[dbo

].[category_changeupdtypemult

]@cgid

varchar(2000

),

@operator

varchar(200

),

@updtype

varchar(50

),

@result

intoutput

asbegin

declare

@sql

varchar(2000

)

set@result=1

begin

transaction

mytrans

set@sql

= n'

update category set updtype=

'''+

@updtype

+'''

,updtime=getdate(),operator=

'''+

@operator

+'''

where cgid in('+

@cgid+'

)'exec(@sql

)

if@@error

<>

0begin

set@result=0

rollback

transaction

mytrans

return

endcommit

transaction

mytrans

end

SQL儲存過程學習

一 sql儲存過程的概念,優點及語法整理在學習程式過程之前,先了解下什麼是儲存過程?為什麼要用儲存過程,他有那些優點 定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。...

SQL儲存過程學習

本文從sql儲存過程的概念,優點,語法,建立技巧,呼叫等多方面介紹了sql儲存過程。一 sql儲存過程的概念,優點及語法 整理在學習程式過程之前,先了解下什麼是儲存過程?為什麼要用儲存過程,他有那些優點 定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫...

SQL儲存過程學習

什麼是儲存過程呢?儲存過程就是作為可執行物件存放在資料庫中的乙個或多個sql命令。通俗來講 儲存過程其實就是能完成一定操作的一組sql語句。那為什麼要用儲存過程呢?1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫...