先說些廢話,由於種種原因,導致不想寫部落格,可能因為工作忙的關係,以後一旦有時間,一定經常來寫寫,嘮叨嘮叨:
言歸正傳,故事即將上演:
declare上面這段**功能是(改版後的),迴圈取出#table#中的資料,取出的sysno為後面的迴圈插入資料做準備。@sysno
intdeclare
@sumcount
intset
@sysno=0
set@sumcount=0
while (1=1)
begin
--先取出top 1 取出一條資料
select
top1
@sysno
=sysno
from #tablename# with(nolock) where status='a
'and (type=
1or type=
2)and sysno >
@sysno
order
by sysno asc
--如果查不到,則退出
if@@rowcount=0
--@@rowcount = 0 @sysno=20
begin
break
enddeclare
@positionid
intdeclare
@num
intdeclare
@where
nvarchar(50)
set@num=0
set@positionid=70
while(1=1)
begin
set@num
=@num+1
set@where
=n'自定義'+
convert(varchar(10),@num)
--判斷是否插入過
ifnot
exists(
select
top1 a from #table# with(nolock)
where description=
@where
)begin
--print @where
insert
into #table#(a
,b,c
,d,e
,f,g,h)
values
(4,@positionid,0,@sysno,@where,getdate(),'
system
','a
')set
@positionid
=@positionid+1
set@sumcount
=@sumcount+1
end--
插入到20個後,停止插入進入下乙個品牌
if(@num
=20)
break
end--
如果插入大於1000條,清0停頓10秒
if(@sumcount
=1000)
begin
set@sumcount=0
waitfor delay '
0:0:10
'end
end
這裡有兩個迴圈,第乙個迴圈由@@rowcount跳出迴圈
第二個迴圈由@num=20跳出
回憶當時寫此sql**歷程:
1.當時我在想,第乙個迴圈想做成表變數,或者用游標實現,但我想如果用這兩者,都會產生額外的開銷,故我用下面這段**
select一看上去,也沒啥問題,後來,經過一位同事review**,結果查出來top1
@sysno
=sysno
from #tablename# with(nolock) where status='a
'and (type=
1or type=
2)and sysno not
between
0and
@sysno
order
by sysno asc
用以下**比用 between..and 要快好多倍,很感謝她。
最後經過多次修改,最後**完整版本,在最上面。
僅個人總結,僅供參考,如果不足之處,懇請指正。
小偷與大偷
發生在兩個菜市場的兩件事情,就像 裡或者電視中看到的一樣,在現實世界中確實存在。第一件事 我把它稱為小偷。聽說今年的大蒜很貴,具體貴到什麼程度我不知道,因為主觀上認為它很貴就沒有買,炒菜幹什麼的能用蔥就用蔥了,還因為在冬天來臨的時候我買了30斤大蔥。但是這天我突然想買了,並且知道只有4.5元一斤,其...
FTPS 與SFTP大對決
ssh 檔案傳輸協議ssh file transfer protocol sftp 也稱為通過安全套接層的檔案傳輸協議file transfer protocol via secure socket layer,以及 ftps 都是最常見的安全 ftp 通訊技術,用於通過 tcp 協議將計算機檔案從...
Servlet Servlet與JSP九大內建物件
servlet與jsp九大內建物件對照表 jsp內建物件out與servlet中response.getwriter 獲得物件並不完全匹配,jsp中是jspwriter型別,而servlet中獲得是printwriter型別,其實乙個是在jsp中輸出,乙個是在servlet中輸出,型別肯定不一樣 r...