SqlServer使用表變量或臨時表遍歷數據

一、sql腳本使用表變量遍歷數據示例:sql

--表變量1
declare @tempTb Table(ID int, Name nvarchar(64))

--表變量2
declare @DtTb Table(ID int, Name nvarchar(64))

insert into @DtTb select top 100 ID,Name from [dbo].[Students]

--聲明循環的變量
declare @ID int;

--經過ID循環
while exists(select ID from @DtTb)
begin
    set rowcount 1; --對整個會話取數據有效,即若如下有查詢語句,也是限定只取一條
    --select top 1 @ID = ID from @DtTb; --用 top 1 只對此句查詢有效
    select @ID = ID from @DtTb;   

    --具體遍歷業務
    insert into @tempTb select * from @DtTb where ID=@ID;

    set rowcount 0; --取消限定
    --遍歷完一條必定要刪掉此條,不然死循環! delete from @DtTb where ID=@ID;
end

select * from @tempTb;
delete
from @tempTb;

 

二、sql腳本使用臨時表遍歷數據示例:spa

--臨時表1
create Table #tempTb(ID int, Dbo nvarchar(64))

--臨時表2
create Table #DtTb(ID int, Dbo nvarchar(64))

insert into #DtTb select top 100 ID,Dbo from [AnyImageGuLou02].[grid].[BHosCheckES]

--聲明循環的變量
declare @ID int;

--經過ID循環
while exists(select ID from #DtTb)
begin
    --set rowcount 1; --對整個會話取數據有效,即若如下有查詢語句,也是限定只取一條
    select top 1 @ID = ID from #DtTb; --用 top 1 只對此句查詢有效
    --select @ID = ID from #DtTb;   

    --具體遍歷業務
    insert into #tempTb select * from #DtTb where ID=@ID;

    --set rowcount 0; --取消限定
    --遍歷完一條必定要刪掉此條,不然死循環!
    delete from #DtTb where ID=@ID;
end

select * from #tempTb;
--select * from #DtTb;

--用完記得刪掉臨時表!
drop table #tempTb;
drop table #DtTb;
相關文章
相關標籤/搜索