一、建立臨時表:
1.系統
例子1:建立tempcategory,每一列定義在括號中;
ifobject_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分頁
alterprocedure
[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
三、事務
alterprocedure
[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語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫...