建立臨時表及如何使用游標SQL

2021-04-14 01:55:13 字數 1392 閱讀 2753

select * from str--str是乙個自建表,包括四個字段(id int,uname,age,mark,都是nvarchar型別,mark not null)

select * into #abc from str--建立臨時表(區域性)

select *,getdate() as ddd,'aaa' as fff into #ddd from str--或可直接在建立臨時表的同時新增新列

select * into ##aaa from str--建立臨時表(全域性)

select * from #abc

select * from ##aaa

exists(select * from #abc)--檢查區域性臨時表是否存在

exists(select * from tempdb..sysobjects where name ='##aaa')--檢查全域性臨時表是否存在

insert into #abc values('ddd','hhh','')--向臨時表中插入資料,此處注意,原表中的mark欄位

--是要求非空的,但在臨時表中不受約束

select * from #abc order by id asc

drop table #abc--刪除臨時表

declare cus cursor for select * from #abc--此處注意,如果加了order by語句,則游標將自動變為唯讀屬性

declare @a varchar(20)

set @a='a'

open cus

fetch next from cus--將游標定位到第一行(開啟游標時的預設位置是在第一行之前)

while @@fetch_status=0--0表示成功執行fetch語句.-1表示fetch語句失敗,例如移動行指標使其超出了結果集.-2表示被提取的行不存在

begin

set @a=@a+'k'

update #abc set

mark=@a where current of cus--current of是游標所在的當前行

fetch next from cus

endclose cus

deallocate cus--刪除游標

select * from #abc

--其中fetch next from cus可改寫成fetch next from cus into @a,@b,@c.....目的是將游標結果集中的各列值放入到變數中

--into @variable_name[,...n]

--允許將提取操作的列資料放到區域性變數中。列表中的各個變數從左到右與游標結果集中的相應列相關聯。各變數的資料型別必須與相應的結

--果列的資料型別匹配或是結果列資料型別所支援的隱性轉換。變數的數目必須與游標選擇列表中的列的數目一致。

如何避免使用游標

如何避免使用游標 文章分類 資料庫 問題的提出 我們在根據乙個結果集的內容,處理另乙個結果集的時候,一般的會考慮到使用下面形式的游標 游標定義 開啟游標 從游標中取第一條資料 迴圈開始,以游標取數後的狀態為迴圈控制條件 修改相關資料表的內容 從游標中取下一條資料 迴圈結束 關閉游標 上面的流程在處理...

SQL 使用游標進行遍歷

前兩天乙個同事大叔問了這樣乙個問題,他要對錶做個類似foreach的效果,問我怎麼搞,我想了想,就拿游標回答他,當時其實也沒用過資料庫中的游標,但是以前用過ado裡面的,感覺應該差不多。首先,讓我們先來建張測試表 use loadtest2010 create table testcursor 建立...

sql 游標的使用 游標FOR迴圈小例子

例子 顯示emp表所有雇員名及其工資 複製 如下 declare cursor emp cursor is select ename,sal from emp begin for emp record in emp cursor loop dbms output.put line 姓名 emp re...