❶ 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
}