你的用的是什么數(shù)據(jù)庫(kù)???
在科爾沁右翼前等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,科爾沁右翼前網(wǎng)站建設(shè)費(fèi)用合理。
第4行,定義游標(biāo)的完全不通呀?
定義游標(biāo)時(shí)不能用斌值 select @sql='if
select 1 from 表名
語(yǔ)法:print varchar 。不要使用"",應(yīng)該使用''。
例如:(環(huán)境 sql server 2008)
declare @what varchar(80);
set @what='大屏顯示系統(tǒng)';
declare @sql varchar(8000);
declare tablecursor cursor local
for
select o.name +'.'+ c.name from sys.sysobjects o inner join sys.syscolumns c on o.id=c.id
where o.name like @what;
open tablecursor;
fetch next from tablecursor into @sql;
while(@@FETCH_STATUS=0)
begin
print '所在的表以及字段:'+ @sql
fetch next from tablecursor into @sql;
end
close tablecursor;
deallocate tablecursor;
注:一般不使用游標(biāo),因?yàn)橛螛?biāo)逐行進(jìn)行數(shù)據(jù)操作。一般用在update幾百萬(wàn)幾千萬(wàn)行的時(shí)候,bulk處理.可以刪一些提交一些,回滾少。日志文件寫入快,避免數(shù)據(jù)緩沖
打字不易,如滿意,望采納。
數(shù)據(jù)庫(kù)之---游標(biāo)分類:數(shù)據(jù)庫(kù)相關(guān)
在數(shù)據(jù)庫(kù)開發(fā)過程中,當(dāng)你檢索的數(shù)據(jù)只是一條記錄時(shí),你所編寫的事務(wù)語(yǔ)句代碼往往使用SELECT INSERT 語(yǔ)句。但是我們常常會(huì)遇到這樣情況,即從某一結(jié)果集中逐一地讀取一條記錄。那么如何解決這種問題呢?游標(biāo)為我們提供了一種極為優(yōu)秀的解決方案。
1.游標(biāo)和游標(biāo)的優(yōu)點(diǎn)
在數(shù)據(jù)庫(kù)中,游標(biāo)是一個(gè)十分重要的概念。游標(biāo)提供了一種對(duì)從表中檢索出的數(shù)據(jù)進(jìn)行操作的靈活手段,就本質(zhì)而言,游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。游標(biāo)總是與一條SQL 選擇語(yǔ)句相關(guān)聯(lián)因?yàn)橛螛?biāo)由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語(yǔ)句檢索出的多條記錄)和結(jié)果集中指向特定記錄的游標(biāo)位置組成。當(dāng)決定對(duì)結(jié)果集進(jìn)行處理時(shí),必須聲明一個(gè)指向該結(jié)果集的游標(biāo)。如果曾經(jīng)用 C 語(yǔ)言寫過對(duì)文件進(jìn)行處理的程序,那么游標(biāo)就像您打開文件所得到的文件句柄一樣,只要文件打開成功,該文件句柄就可代表該文件。對(duì)于游標(biāo)而言,其道理是相同的。可見游標(biāo)能夠?qū)崿F(xiàn)按與傳統(tǒng)程序讀取平面文件類似的方式處理來(lái)自基礎(chǔ)表的結(jié)果集,從而把表中數(shù)據(jù)以平面文件的形式呈現(xiàn)給程序。
我們知道關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)質(zhì)是面向集合的,在MS SQL SERVER 中并沒有一種描述表中單一記錄的表達(dá)形式,除非使用where 子句來(lái)限制只有一條記錄被選中。因此我們必須借助于游標(biāo)來(lái)進(jìn)行面向單條記錄的數(shù)據(jù)處理。由此可見,游標(biāo)允許應(yīng)用程序?qū)Σ樵冋Z(yǔ)句select 返回的行結(jié)果集中每一行進(jìn)行相同或不同的操作,而不是一次對(duì)整個(gè)結(jié)果集進(jìn)行同一種操作;它還提供對(duì)基于游標(biāo)位置而對(duì)表中數(shù)據(jù)進(jìn)行刪除或更新的能力;而且,正是游標(biāo)把作為面向集合的數(shù)據(jù)庫(kù)管理系統(tǒng)和面向行的程序設(shè)計(jì)兩者聯(lián)系起來(lái),使兩個(gè)數(shù)據(jù)處理方式能夠進(jìn)行溝通。
2. 游標(biāo)種類
MS SQL SERVER 支持三種類型的游標(biāo):Transact_SQL 游標(biāo),API 服務(wù)器游標(biāo)和客戶游標(biāo)。
(1) Transact_SQL 游標(biāo)
Transact_SQL 游標(biāo)是由DECLARE CURSOR 語(yǔ)法定義、主要用在Transact_SQL 腳本、存儲(chǔ)過程和觸發(fā)器中。Transact_SQL 游標(biāo)主要用在服務(wù)器上,由從客戶端發(fā)送給服務(wù)器的Transact_SQL 語(yǔ)句或是批處理、存儲(chǔ)過程、觸發(fā)器中的Transact_SQL 進(jìn)行管理。 Transact_SQL 游標(biāo)不支持提取數(shù)據(jù)塊或多行數(shù)據(jù)。
(2) API 游標(biāo)
API 游標(biāo)支持在OLE DB, ODBC 以及DB_library 中使用游標(biāo)函數(shù),主要用在服務(wù)器上。每一次客戶端應(yīng)用程序調(diào)用API 游標(biāo)函數(shù),MS SQL SEVER 的OLE DB 提供者、ODBC驅(qū)動(dòng)器或DB_library 的動(dòng)態(tài)鏈接庫(kù)(DLL) 都會(huì)將這些客戶請(qǐng)求傳送給服務(wù)器以對(duì)API游標(biāo)進(jìn)行處理。
(3) 客戶游標(biāo)
客戶游標(biāo)主要是當(dāng)在客戶機(jī)上緩存結(jié)果集時(shí)才使用。在客戶游標(biāo)中,有一個(gè)缺省的結(jié)果集被用來(lái)在客戶機(jī)上緩存整個(gè)結(jié)果集??蛻粲螛?biāo)僅支持靜態(tài)游標(biāo)而非動(dòng)態(tài)游標(biāo)。由于服務(wù)器游標(biāo)并不支持所有的Transact-SQL 語(yǔ)句或批處理,所以客戶游標(biāo)常常僅被用作服務(wù)器游標(biāo)的輔助。因?yàn)樵谝话闱闆r下,服務(wù)器游標(biāo)能支持絕大多數(shù)的游標(biāo)操作。由于API 游標(biāo)和Transact-SQL 游標(biāo)使用在服務(wù)器端,所以被稱為服務(wù)器游標(biāo),也被稱為后臺(tái)游標(biāo),而客戶端游標(biāo)被稱為前臺(tái)游標(biāo)。在本章中我們主要講述服務(wù)器(后臺(tái))游標(biāo)。
你可以通過這個(gè)鏈接引用該篇文章:
2006.7.22 22:44 作者:java021 收藏 | 評(píng)論:5 | 閱讀:1239
----------------------
舉例還不得編程?
游標(biāo)實(shí)現(xiàn)方法
Declaer @FieldNames varchar(1000)
Declare @FieldName varchar(30)
Set @FieldNames = ''
定義游標(biāo)
Select FieldNames = case when ct_monday between 開始值 and 結(jié)束值 then 字段名
when ct_monday between 開始值 and 結(jié)束值 then 字段名
when ct_monday between 開始值 and 結(jié)束值 then 字段名
,,,,,,,,
End
from A
條件
打開游標(biāo)
取游標(biāo)值語(yǔ)句 @FieldName
循環(huán)
begin
if @FieldNames ''
set @FieldNames = @FieldNames + ','
set @FieldNames = @FieldNames + @FieldName + ' decimal(10,2) NULL'
取游標(biāo)值語(yǔ)句 @FieldName
END
end
關(guān)閉游標(biāo)
釋放游標(biāo)
if exists(select 1 from sysobjects where name = '表名')
drop table 表名
exec('Create table 表名 (' + @FieldNames + ')'
如果只是查詢ID=9的記錄這樣就行了
SELECT * FROM 表名 WHERE ID=9
滿意請(qǐng)采納。
table1結(jié)構(gòu)如下
id int
name varchar(50)
declare @id int
declare @name varchar(50)
declare cursor1 cursor for --定義游標(biāo)cursor1
select * from table1 --使用游標(biāo)的對(duì)象(跟據(jù)需要填入select文)
open cursor1 --打開游標(biāo)
fetch next from cursor1 into @id,@name --將游標(biāo)向下移1行,獲取的數(shù)據(jù)放入之前定義的變量@id,@name中
while @@fetch_status=0 --判斷是否成功獲取數(shù)據(jù)
begin
update table1 set name=name+'1'
where id=@id --進(jìn)行相應(yīng)處理(跟據(jù)需要填入SQL文)
fetch next from cursor1 into @id,@name --將游標(biāo)向下移1行
end
close cursor1 --關(guān)閉游標(biāo)
deallocate cursor1
--申明一個(gè)游標(biāo)
DECLARE MyCursor CURSOR
FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo
--打開一個(gè)游標(biāo)
OPEN MyCursor
--循環(huán)一個(gè)游標(biāo)
DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000)
FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding
WHILE @@FETCH_STATUS =0
BEGIN
print 'name'+@BookName
FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding
END
--關(guān)閉游標(biāo)
CLOSE MyCursor
--釋放資源
DEALLOCATE MyCursor
游標(biāo)屬于行級(jí)操作 消耗很大
SQL查詢是基于數(shù)據(jù)集的
所以一般查詢能有 能用數(shù)據(jù)集 就用數(shù)據(jù)集 別用游標(biāo)
數(shù)據(jù)量大 是性能殺手
當(dāng)前標(biāo)題:sqlserver游標(biāo)實(shí)例,sqlserver游標(biāo)for循環(huán)
文章URL:http://sd-ha.com/article28/dsesgcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站維護(hù)、微信小程序、關(guān)鍵詞優(yōu)化、App開發(fā)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)