當前位置:首頁 » 編程語言 » sql循環用法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql循環用法

發布時間: 2023-05-26 22:50:20

sql 幾種循環方式

1:游標方式

ALTERPROCEDURE[dbo].[testpro]
as

declare@yeardatestrvarchar(20)--日期拼接
declare@meternovarchar(20)--儀表編號
declare@collectindatanamevarchar(30)--數據採集表
declare@collectindataname_backvarchar(30)--數據採集備份表


declare@monsdtvarchar(20)
declare@monedtvarchar(20)

begin


set@yeardatestr=datename(YY,getdate())+datename(MM,getdate())


set@monsdt=Convert(VarChar(4),DatePart(year,GETDATE()))+'-'+Convert(VarChar(2),DatePart(MONTH,DateAdd(MONTH,-2,GETDATE())))+'-01'
set@monedt=CONVERT(VARCHAR(10),DateAdd(DAY,-1,DateAdd(MONTH,2,Convert(datetime,@monsdt,121))),20)

declaremeters_curcursorlocalfast_forward--定義游標
for

openmeters_cur--打開游標
fetchnextfrommeters_curinto@meterno--從游標中取出數據
while@@fetch_status=0--取出數據成功
begin

dbccSHRINKFILE(testdb_log,0)--收縮日誌
fetchnextfrommeters_curinto@meterno--下一條
end
closemeters_cur--關閉游標
deallocatemeters_cur--釋放游標

end

2:goto方式

nextValue:--循環起點關鍵字
select@num=ynumfrompp_yunnumwhereprjsht=@prjsht

IF(@flg=1)
set@yunsht='K'+@prjsht+'-'+Convert(varchar(10),@num+1)
ELSE
set@yunsht=REPLACE(@prjsht,'_','')+'-'+dbo.Lpad(@num+1,2,'0')

ifexists(select1frompp_yunwherepp_yun.sht=@yunsht)
begin
updatepp_yunnumsetynum=ynum+1whereprjsht=@prjsht

gotonextValue;--重新從nextValue出執行
end

❷ SQL存儲過程中怎麼寫循環

方法和詳細的操作步驟如下:

1、第一步,編寫存儲過程的整體結構,定義變數,見下圖,轉到下面的步驟。

❸ SQL利用循環語句插入數據

CREAT PROCEDURE tester
AS
BEGIN
SET NOCOUNT ON;
DECLARE @userId varchar(50)
DECLARE @count int
SET @count = 0
SELECT @count = count(*) FROM UserService_User WHERE Account like '%111%'
WHILE @count > 0
BEGIN
SELECT @userId = Id FROM UserService_User WHERE Account like '%111%'
exec UserService_RemoveUserByUserId @userId
SET @count = @count -1
END
END
說明:
1、此存儲過程在SQL SERVER 2005上測試通過,值得注意的是,循環體中,語句是使用BEGIN……END包括的,而不是網路上常說的WHILE ……END WHILE結構,其他的循環語句,如LOOP ……UNTIL……END LOOP也不能通過編譯,也許是版本的問題,但在SQL SERVER2005中,循環體使用BEGIN……END就可以,而不能使用網路上常說的WHILE ……END WHILE結構。
2、循環體中 UserService_RemoveUserByUserId 是一個存儲過程的名稱,@userId為該存儲過程的參數,如果有多個參數,使用「,」分開就可以了,這也是存儲過程調用另一個存儲過程的一種方法。

❹ 如何用SQL循環查詢語句

最好的方法是使用存儲過程,然後使用一個臨時表,把每次選擇的數據保存到臨時表中。
臨時表可以在存儲過程中使用 creat table #表名(欄位 欄位類型) 來創建,這樣的表只在當前存在,相當於放到了內存里,你也可以實際的建一個表,然後把查出的結果都保存進去。以後選擇都從這個表裡查。
大概意思就是這樣
declare @tmp=304
creat table #臨時表(學校名稱 varchar(200),學校代碼 varchar(200),人數 int,總成績 varchar(30))
while @tmp<600
begin
declare @tmpb=@tmp+1
declare @zcj=@tmp+'-'+@tmpb
insert into #臨時表 select 學校代碼,學校名稱,count(*) as 人數,@zcj as 總成績 from cjd where 總成績>=@tmp and 總成績<@tmpb group by 學校代碼,學校名稱
@tmp=@tmp+1
end
select * from #臨時表
go

大概的意思就是這樣,如果你創建好了本地實際的表,那就省掉創建表,然後把數據插到創建好的表中即可,而且這樣方便你以後做各種查詢,所以推薦你還是創建一個這樣的表比較好。

❺ 如何在SQL中使用循環結構

解答FOR,LOOP,WHILE,REPEAT是UDB/400的一種內部循環控制,用於遍歷表中符合條件的每一行記錄。
https://jingyan..com/article/a681b0decb014b3b1843463d.html

❻ 如何使用SQL循環查詢動態生成數據表的內容

大概邏輯如下,如果要具體代碼可以追問
@date1='2013-02-01'
@date2='3013-07-26'
第一步,判斷@date1<@date2,如果為假返回空
第二步,根據@date1來獲取要查詢的當前表名
第三步,使用while循環,每次將@date1加一個月,得出所有需要查詢的表名
第四步,循環的判斷條件,是加了N個月以後的@date1的最後一天小於等於@date2才繼續循環,否則退出循環。
第五步,將查詢到的數據返回。
附:第二步到第四步,可以是動態構建SQL語句的方法,在最後一步的時候才查詢出來;
也可以是先聲明一個臨時表,第二步到第四步的時候,都查詢數據並插入到臨時表中,最後查詢臨時表。

❼ 在sql server中循環語句 for要怎麼使用

sql server里有循環語句,在sqlserver 資料庫中,while循環語句是最常用的語句之一,for指定次數用的很少。比如:
SQL循環語句
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end

while 條件
begin
執行操作
set @i=@i+1
end
WHILE
設置重復執行 SQL 語句或語句塊的條件,只要指定的條件為真,就重復執行語句,可以使用 BREAK 和 CONTINUE 關鍵字在循環內部控制 WHILE 循環中語句的執行。
語法
WHILE Boolean_expression
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
參數
Boolean_expression
返回 TRUE 或 FALSE 的表達式。如果布爾表達式中含有 SELECT 語句,必須用圓括弧將 SELECT 語句括起來。
{sql_statement | statement_block}
Transact-SQL 語句或用語句塊定義的語句分組,若要定義語句塊,請使用控制流關鍵字 BEGIN 和 END。
BREAK

❽ SQL 循環操作

Create Table #Tmp

(

ID int identity(1,1),

貨號 Varchar(10),

訂貨數量 int,

庫存 int,

發貨數量 int

)


Insert Into #Tmp(貨號,訂貨數量,庫存,發貨數量) Values('SP001',10,28,0)

Insert Into #Tmp(貨號,訂貨數量,庫存,發貨數量) Values('SP001',30,28,0)

Insert Into #Tmp(貨號,訂貨數量,庫存,發貨數量) Values('SP002',30,10,0)

Insert Into #Tmp(貨號,訂貨數量,庫存,發貨數量) Values('SP002',6,10,0)

Insert Into #Tmp(貨號,訂貨數量,庫存,發貨數量) Values('SP002',5,10,0)

Insert Into #Tmp(貨號,訂貨數量,庫存,發貨數量) Values('SP003',3,28,0)


Declare @ID Int

DECLARE @貨號 Varchar(10)

Declare @舊貨號 Varchar(10)

Declare @訂貨數量 int

Declare @庫存 int

Declare @Tmp int


Set @舊貨號=''


DECLARE vendor_cursor CURSOR FOR

Select ID,貨號,訂貨數量,庫存 From #Tmp Order By 貨號


OPEN vendor_cursor;


FETCH NEXT FROM vendor_cursor

INTO @ID,@貨號, @訂貨數量,@庫存


WHILE @@FETCH_STATUS = 0

BEGIN

if (@舊貨號<>@貨號)

Begin

Set @舊貨號=@貨號

Set @Tmp=@庫存

End

--庫存小於0,不發貨

if @Tmp<=0

Update #Tmp Set 庫存=@Tmp Where ID=@ID

Else

Begin

--訂貨數小於等於庫存數,發訂貨數,否則發庫存數

if (@訂貨數量<=@Tmp)

Begin

Update #Tmp Set 發貨數量=@訂貨數量,庫存=@Tmp Where ID=@ID

Set @Tmp=@Tmp-@訂貨數量

End

Else

Begin

Update #Tmp Set 發貨數量=@Tmp,庫存=@Tmp Where ID=@ID

Set @Tmp=@Tmp-@Tmp

End

End

FETCH NEXT FROM vendor_cursor

INTO @ID,@貨號, @訂貨數量,@庫存

CLOSE vendor_cursor

DEALLOCATE vendor_cursor


Select * From #Tmp

Drop Table #Tmp



❾ 如何用Sql語句循環執行語句

SQL語句無法實現循環,只能通過程序或者存儲過程來實現。

如果只是一次性工作,則建議直接用EXCEL的公式手批量生成SQL語句 然後一次性貼到MYSQL的命令行工具中執行即可。

S1 : 創建一個模板表 create table t (id int, col1 int , col2 varchar(10));
S2 : EXCEL中在A1輸入 ="create table t"&ROW()&" like t;"
S3: 下拉填充這個A1至A1000
create table t1 like t;
create table t2 like t;
create table t3 like t;
create table t4 like t;
create table t5 like t;
create table t6 like t;
create table t7 like t;
create table t8 like t;
create table t9 like t;
create table t10 like t;

S4: 復制到MYSQL命令行工具一次行執行。

❿ sql語句怎麼循環查詢

selectf1fromtable1的結果集做為查詢條件循環查詢。
如:
set@a=selectf1fromtable1
foreach(@a)
{
select*fromtable2
wheref2=@a
}