程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 深刻SQL Cursor根本用法的具體引見

深刻SQL Cursor根本用法的具體引見

編輯:MSSQL

深刻SQL Cursor根本用法的具體引見。本站提示廣大學習愛好者:(深刻SQL Cursor根本用法的具體引見)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻SQL Cursor根本用法的具體引見正文


因為這個游標 履行一下就相當於SELECT一下 其效力不敢奉承也沒做深刻研討。

 table1構造以下
 id    int
 name  varchar(50)

 declare @id int
 declare @name varchar(50)
 declare cursor1 cursor for         --界說游標cursor1
 select * from table1               --應用游標的對象(跟據須要填入select文)
 open cursor1                       --翻開游標

 fetch next from cursor1 into @id,@name  --將游標向下移1行,獲得的數據放入之前界說的變量@id,@name中

 while @@fetch_status=0           --斷定能否勝利獲得數據
 begin
 update table1 set name=name+'1'
 where id=@id                           --停止響應處置(跟據須要填入SQL文)

 fetch next from cursor1 into @id,@name  --將游標向下移1行
 end

 close cursor1                   --封閉游標
 deallocate cursor1

游標普通格局:
DECLARE 游標稱號 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游標稱號
FETCH NEXT FROM 游標稱號 INTO 變量名1,變量名2,變量名3,...
WHILE @@FETCH_STATUS=0
        BEGIN
                  SQL語句履行進程... ...
                  FETCH NEXT FROM 游標稱號 INTO 變量名1,變量名2,變量名3,...
        END
CLOSE 游標稱號
DEALLOCATE 游標稱號 (刪除游標)

例子:
/*
功效:數據庫表格tbl_users數據
deptid userid username
1          100      a
1      101      b
2      102      c
請求用一個sql語句輸入上面成果
deptid username
1        ab
2        c
[請求用游標完成設計: OK_008
時光: 2006-05
備注:無
*/
create table #Temp1(deptid int,userid int,username varchar(20)) --待測試的數據表
create table #Temp2(deptid int,username varchar(20))                --成果表
--先把一些待測試的數據拔出到待測試表#Temp1中
insert into #Temp1
select 1,100,'a' union all
select 1,101,'b' union all
select 1,131,'d' union all
select 1,201,'f' union all
select 2,302,'c' union all
select 2,202,'a' union all
select 2,221,'e' union all
select 3,102,'y' union all
select 3,302,'e' union all
select 3,121,'t'
--
declare @deptid int,@username varchar(20)
--界說游標
declare Select_cursor cursor for
        select deptid,username from #Temp1
open Select_cursor
fetch next from Select_cursor into @deptid,@username    --提取操作的列數據放到部分變量中
while @@fetch_status=0      --前往被 FETCH 語句履行的最初游標的狀況
/*
@@FETCH_STATUS =0          FETCH 語句勝利
@@FETCH_STATUS =-1 FETCH 語句掉敗或此行不在成果集中
@@FETCH_STATUS =-2 被提取的行不存在
*/
        begin
                  --當表#Temp2列deptid存在雷同的數據時,就直接在列username上追加@username值
                  if(exists(select * from #Temp2 where deptid=@deptid ))
                          update #Temp2 set username=username +@username where deptid=@deptid
                  else
                  --拔出新數據
                          insert into #Temp2 select @deptid,@username
                  fetch next from Select_cursor into @deptid,@username
        end
close Select_cursor     
deallocate Select_cursor
select * from #Temp2 --測試成果
Drop table #Temp1,#Temp2
��許去浏覽Quirksmode的《The display declaration》一文。

HTML Code


<div id="container">
<div id="content">content</div>
</div>

CSS Code


#container {
height: 300px;
display: table;/*讓元素以表格情勢襯著*/
}
#content {
display:table-cell;/*讓元素以表格的單位素格情勢襯著*/
vertical-align: middle;/*應用元素的垂直對齊*/
}

長處:

這類辦法不會像後面的兩種辦法一樣,有高度的限制,此辦法可以要據元素內容靜態的轉變高度,從而也就沒有空間的限制,元素的內容不會由於沒足夠的空間而被割斷或許湧現好看的轉動條。

缺陷:

缺乏的地方呢?這類辦法只合適古代閱讀器,在IE6-7下沒法正常運轉;並且較前二者而言,構造也更龐雜。

這類辦法在古代閱讀器下長短常便利。然則在IE6-7中是不被支撐的,由於display:table在IE6-7中不被支撐,那末為懂得決這類辦法在IE6-7的兼容,須要額定增長一個div,並應用hack,上面我們一路來看看其處理方法。

HTML Markup


<div class="table">
<div class="tableCell">
<div class="content">content</div>
</div>
</div>

CSS Code


.table {
height: 300px;/*高度值不克不及少*/
width: 300px;/*寬度值不克不及少*/
display: table;
position: relative;
float:left;
}
.tableCell {
display: table-cell;
vertical-align: middle;
text-align: center;
padding: 10px;
*position: absolute;
*top: 50%;
*left: 50%;
}
.content {
*position:relative;
*top: -50%;
*left: -50%;
}

辦法四:

這類辦法有點新意,用這類辦法你須要在居中元素後面放一個空的<div>(塊元素便可以),然後設置這個<div>的高度為50%,margin-bottom為元素高度的一半,並且居中元素須要消除浮動。須要留意的是,應用這類辦法,假如你的居中元素是放在body中的話,你須要給html,body設置一個“height:100%”的屬性。

HTML Markup


<body>
<div id="floater"><!--This block have empty content --></div>
<div id="content">Content section</div>
</body>

CSS Code


html,body {height: 100%;}
#floater{
float:left;
height:50%;/*絕對於父元素高度的50%*/
margin-bottom: -120px;/*值年夜小為居中元素高度的一半(240px/2)*/
}
#content {
clear:both;/*消除浮動*/
height: 240px;
position: relative;
}

長處:

這類辦法能兼容一切閱讀器,在沒有足哆空間下,內容不會被切失落

缺陷:

元素高度被固定逝世,沒法到達內容自順應高度,假如居中元素加上overflow屬性,要末元素湧現轉動條,要末元素被切失落;別的就是一個不算缺陷的缺陷,那就是加了一個空標簽。

辦法五:

這類辦法和辦法三一樣應用display:table-cell來完成,不外辦法五分歧的地方是這個辦法我們須要一個線盒型,用來完成IE下的後果,須要增長一下行內標簽好比說“span”(此處最好應用行內標簽,萬萬不要應用塊標簽,由於應用塊標簽會沒有用果),並把這個線盒型高度設置為100%,其完成道理年夜家可以去浏覽《年夜小不固定的圖片、多行文字的程度垂直居中》。

HTML Markup


<p class="table">
<span class="tableCell">Centering multiple lines
in a block container.</span>
<!--[if lte IE 7]><b></b><![endif]-->
</p>

CSS Code


<style type="text/css">
.table {
border: 1px solid orange;
display: table;
height: 200px;
width: 200px;
text-align: center;
}
.tableCell {
display: table-cell;
vertical-align: middle;
}
</style>
<!--[if lte ie 7]>
<style type="text/css">
.tableCell {
display: inline-block;
}

b {
display: inline-block;
height: 100%;
vertical-align: middle;
width: 1px;
}
</style>
<![endif]-->

長處:

這類辦法的長處和辦法三是一樣的,不會有高度的限制。

缺陷:

欠好的處所就是這類辦法為了讓IE運轉正常,須要額定增長一些標簽,別的就是線盒型的標簽品種無限制。不外用起來照樣蠻便利的。

辦法六:

這類辦法是采取的display:inline-block,然後借助另外一個元素的高度來完成居中

Html Markup


<div id="parent">
<div id="vertically_center">
<p>I am vertically centered!</p>
</div>
<div id="extra"><!-- ie comment --></div>
</div>

CSS Code


<style type="text/css">
html,
body{
height: 100%;
}
#parent {
height: 500px;/*界說高度,讓線盒型div#extra有一個參照物,可所以固定值,也能夠是百分比*/
border: 1px solid red;
}
#vertically_center,
#extra {
display: inline-block;/*把元素轉為行內塊顯示*/
vertical-align: middle;/*垂直居中*/
}
#extra {
height: 100%; /*設置線盒型為父元素的100%高度*/
}
</style>
<!--[if lt IE 8]>
<style type="text/css">
/*IE6-7不支撐display:inline-block,所以在ie6-7別的寫一個hack,用來支撐ie6-7*/
#vertically_center,
#extra {
display: inline;
zoom: 1;
}
#extra {
width: 1px;
}
</style>
<![endif]-->

長處:

可以自順應高度,簡略易懂

缺陷:

須要給元素的父元素設置一個高度,這個高度可所以一個固定值或許百分值高度,別的須要增長一個額定的標簽,看成線盒型,如div#extra,而且須要設置其高度為100%。別的就是ie6-7不支撐display:inline-block,須要給他們別的寫一個款式。

這是一個很成心思的辦法,但你要理解若何應用display。有關於這類辦法的操作,年夜家可以去看一看Jonathan Potter寫的《CSS, Vertical Centering》。

辦法七:

這個辦法是針對多行內容居中,並且容器高度是可變的,辦法很簡略,就是給出高低一樣的padding值

Html Code


<div class="columns">
<div class="item">test</div>
</div>

CSS Code


.item {padding-top:30px;padding-bottom:30px;}

長處:

在一切閱讀器下能正常任務,支撐一切元素,簡略易懂,構造清楚

缺陷:

應用這類辦法不克不及給容器固定高度,假如固定高度將沒法到達後果。

辦法八:

正如後面所述,假如元素固定高度後要完成垂直居中,用CSS完成很便利,但關於自順應高度的就比擬辣手了。那末第七種辦法,要給年夜家引見的是應用jQuery的辦法

Html Markup


<div class="container">
<p>Centered In The Middle Of The Page With jQuery</p>
</div>

CSS Code


.container{
background-color:#338BC7;
width:270px;
height:150px;
}

jQuery Code


$(document).ready(function(){
$(window).resize(function(){
$('.container').css({
position:'absolute',
left: ($(window).width() - $('.container').outerWidth())/2,
top: ($(window).height() - $('.container').outerHeight())/2
});
});
// 最後運轉函數
$(window).resize();
});

長處:

這類辦法,構造簡略,易懂,不須要固定元素的年夜小。兼容各閱讀器。

缺陷:

須要挪用jQuery,假如不支撐js或許用戶禁失落了js,那末將沒法正常運轉,那就是杯具了。

下面這類辦法對完成頁面居中結構很便利,上面我依據下面的思緒和辦法二寫了一個完成元素程度垂直居中的小插件

jQuery Plugin


(function($){
$.fn.vhAlign = function(){
return this.each(function(i){
//獲得元素的內容高度
var h = Math.ceil($(this).height());
//outerHeight=padding+border+height
var oh = Math.ceil($(this).outerHeight());
//獲得margin-top值
var mt = Math.ceil(oh / 2);
//獲得元素寬度
var w = Math.ceil($(this).width());
//outerWidth=padding+border+width
var ow = Math.ceil($(this).outerWidth());
//獲得margin-left
var ml = Math.ceil(ow / 2);
//完成元素居中後果
$(this).css({
"margin-top": "-" + mt + "px",
"top": "50%",
"margin-left": "-" + ml + "px",
"left": "50%",
"width":w,
"height":h,
"position": "absolute"
});
});
};
})(jQuery);

Html Markup


<div class="wrap">
<p>test jquery</p>
</div>

接上去須要挪用適才寫好的jQuery插件


<script type="text/javascript" src="vhAlign.js"></script>

最初須要在div.wrap挪用這個function


<script type="text/javascript">
$(document).ready(function(){
$(".wrap").vhAlign();
});
</script>

這裡有一點須要特殊留意,假如元素不是絕對於body居中,那末須要在其父元素中停止絕對定位。

下面我們一路見證了八種分歧辦法完成元素的垂直居中後果,上面我們在簡略的看一下若何完成元素的程度居中(其實下面有一些後果也完成了程度居中,你可以漸漸回憶一下)。

辦法一:

這類辦法重要應用margin: auto合營元素的width來完成程度居中的後果

Html Markup


<div class="horizontal">content</div>

CSS Code:


.horizontal {
width: 200px;
margin: 0 auto;
}

應用下面辦法完成元素程度居中必定要讓元素知足兩個前提:其一,元素須要有一個固定寬度值;其二元素的margin-left和margin-right都必需設置為auto,這兩個前提少了任何一個都沒法讓元素到達程度居中的後果。此辦法應用程度居中,支撐一切閱讀器運轉,是以他也經常使用來完成Web頁面程度居中的結構後果,假如用在結構,須要留意IE下的後果,換句話說,假如你的Web頁面沒有明白聲明"!DOCTYPE",那末在IE也會以奇異形式解析你的Web頁面,此時下面這類方法將沒法讓你的頁面完成程度居中,但你可使用上面這類辦法處理這個bug。

Html Code:


<div class="container"> 頁面內容。... </div>

CSS Code:


body {
text-align: center;/*完成IE在奇異形式下頁面程度居中*/
}
.container {
text-align: left;/*讓文本恢復到左對齊*/
width: 960px;/*設置頁面總寬度*/
margin: 0 auto;/*使頁面程度居中對齊*/
}

辦法二:

完成固定寬度的程度居中,我們還可使用相對定位合營負的margin來完成,詳細代碼以下:

Html Markup


<div class="horizontal">content</div>

CSS Code:


.horizontal {
width: 960px;
position: absolute;
left: 50%;
margin-left: -480px;/*此值等於“-width/2”*/
}

這類辦法有幾點須要留意:其一要有一個固定寬度,其二對要居中的元素停止相對定位,而且“left: 50%”;其三對此元素設置一個負的“margin-left”而且值等於寬度的一半,別的假如元素不是絕對於閱讀器的話,還須要在其父元素上設置一個絕對定位“position: relative”。

辦法三:

這類辦法重要是針對單行文本居中或許後面引見的table格局居,重要應用的是text-align:center讓元素程度居中


.testH{text-align:center;}

面重要是和年夜家一路商量和進修了多種辦法讓元素完成垂直居中,年夜家可以在這幾種辦法上稍做轉變就可以完成其程度居中,如許就到達了元素程度垂直居中的後果。完成辦法許多,並且他們也各有所長,可以說他們各有各的好,各有各的壞,詳細怎樣讓他們更合適你的現實運用,你可以細心比較一下,我比擬愛好辦法四,簡略,兼容性強,只是須要增長一個額定的標簽。說了這麼多,願望能給須要的同伙有所贊助。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved