sql存儲過程循環
declare @i int
set @i = 0
while @i < 100
begin
print @i
set @i = @i + 1
end
-- 定義循環變數
declare @loopIndex int set @loopIndex = 0
--定義循環次數
declare @count int set @count=1
-- 取得循環次數
select @count=count(1) from sys_user
-- 開始循環
while @loopIndex <= @count
begin
-- 定義接收參數
declare @USER_NAME nvarchar(50)
-- 取得循環的數據
SELECT @USER_NAME = hh.USER_NAME
FROM (SELECT ROW_NUMBER() OVER (ORDER BY USER_NAME) 'rowindex',USER_NAME FROM sys_user)hh
WHERE hh.rowindex = @loopIndex
-- 進行相關業務邏輯 例如輸出結果
print @USER_NAME
-- 循環自動加一
set @loopIndex = @loopIndex + 1
end
begin
-- 定義錯誤返回信息
declare @error int
-- 定義接收參數
declare @User_Name varchar(50)
declare @Address varchar(50)
set @error=0
--定義游標
declare demo_cursor cursor
for (select User_Name,Address from sys_user)
--打開游標--
open demo_cursor
--開始循環游標變數--
fetch next from demo_cursor into @User_Name,@Address
while @@FETCH_STATUS = 0 --返回被 FETCH語句執行的最後游標的狀態--
begin
print @User_Name+'____'+@Address
set @error= @error + @@ERROR --記錄每次運行sql後是否正確,0正確
fetch next from demo_cursor into @User_Name,@Address --轉到下一個游標,沒有會死循環
end
close demo_cursor --關閉游標
deallocate demo_cursor --釋放游標
end
更多內容請訪問: https://mxdqh.top/
2. sqlserver 存儲過程中循環遍歷結果集
sql1=select * from (select *, row_number() over(order by username ) as rowNumber from users where regfrom='&admin&') as t where t.rowNumber > 0 and t.rowNumber <= 0 + 30 order by username
怎麼會有27 條記錄呢,除非你的表 一共就27條記錄吧。
用游標或臨時表
--游標
declare youbiao1 for 查詢1
open youbiao1
fetch next from youbiao1 into 變數
while @@FETCH_STATUS = 0
begin
裡面一次套用
end
--臨時表
declare @ID int
set @ID = 1
while Exists(select * from 表)
begin
--處理
--
set @ID = @ID + 1
end
3. sql 存儲過程 游標循環
SET @SQL='
DECLARE @INSTALL 類型
DECLARE EMPLOYEE_CLASS CURSOR FOR
SELECT INSTALL '+@TABLENAME
SET @SQL=@SQL+'
OPEN EMPLOYEE_CLASS
FETCH NEXT FROM EMPLOYEE_CLASS INTO @INSTALL
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM EMPLOYEE_CLASS INTO @INSTALL
END
CLOSE EMPLOYEE_CLASS
DEALLOCATE EMPLOYEE_CLASS
RETURN
'
EXEC (@SQL)
4. MySQL 存儲過程 怎麼實現 循環sql語句
delimiter $$
mysql>
mysql> CREATE PROCEDURE myProc() //創建while循環的存儲過程 if分支語句示例
-> BEGIN
->
-> DECLARE i int;
-> SET i=1;
-> loop1: WHILE i<=10 DO
-> IF MOD(i,2)<>0 THEN /*Even number - try again*/
-> SELECT CONCAT(i," is an odd number");
-> END IF;
-> SET i=i+1;
-> END WHILE loop1;
-> END$$
Query OK, 0 rows affected (0.00 sec)
這種也可以
5. mssql 存儲過程中循環如何寫,在循環中用什麼語句跳出循環呢,在線等
給你個例子:
for loop是這樣的:
createprocere pro
begin
declare aintdefault1;
label1: loop
if a<6then
selecta;
seta=a+1;
iterate label1;
endif;
leave label1;跳出循環
endloop label1;
end
while是這樣的:
createprocere pro
begin
declare aintdefault4;
while a<10 do
selecta;
seta=a+1;
endwhile;
end
6. 如何在SQL SERVER 2005存儲過程中,使用循環語句
實現循環有很多種方式 看你需要 或者喜歡
有for 循環
有while 循環
有foreach 循環
等等 我用的不是 sql sever資料庫 具體的 你自己寫寫看
------------------------------------------------------------
SQL
SERVER資料庫建立存儲過程時,可以使用循環語句,下面就將為您介紹這種SQL SERVER資料庫中存儲過程使用循環語句的方法,供您參考。
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為該存儲過程的參數,如果有多個參數,使用「,」分開就可以了,這也是存儲過程調用另一個存儲過程的一種方法。
這個是我從網上網路的 希望對你有用
7. SQLserver中存儲過程中如何循環取值
sqlserver 中循環取值有兩種方法:
1.使用游標
2.mssql sqlserver 遍歷循環的新方法-使用while語句+臨時表的方法。
8. sql 存儲過程裡面如何 對數據集循環
A. 在簡單的游標中使用 FETCH
以下示例為 Person.Contact 表中姓氏以字母 B 開頭的行聲明了一個簡單的游標,並使用 FETCH NEXT 逐個提取這些行。FETCH 語句以單行結果集形式返回在 DECLARE CURSOR 中指定的列的值。
USEAdventureWorks
GO
DECLAREcontact_cursorCURSORFOR
SELECTLastNameFROMPerson.Contact
WHERELastNameLIKE'B%'
ORDERBYLastName
OPENcontact_cursor
--Performthefirstfetch.
FETCHNEXTFROMcontact_cursor
--Check@@FETCH_.
WHILE@@FETCH_STATUS=0
BEGIN
--.
FETCHNEXTFROMcontact_cursor
END
CLOSEcontact_cursor
DEALLOCATEcontact_cursor
GO
B. 使用 FETCH 將值存入變數
以下示例與示例 A 相似,但 FETCH 語句的輸出存儲於局部變數而不是直接返回到客戶端。PRINT 語句將變數組合成單一字元串並將其返回到客戶端。
USEAdventureWorks
GO
--.
DECLARE@LastNamevarchar(50),@FirstNamevarchar(50)
DECLAREcontact_cursorCURSORFOR
SELECTLastName,FirstNameFROMPerson.Contact
WHERELastNameLIKE'B%'
ORDERBYLastName,FirstName
OPENcontact_cursor
--.
--Note:
--intheSELECTstatement.
FETCHNEXTFROMcontact_cursor
INTO@LastName,@FirstName
--Check@@FETCH_.
WHILE@@FETCH_STATUS=0
BEGIN
--.
PRINT'ContactName:'+@FirstName+''+@LastName
--.
FETCHNEXTFROMcontact_cursor
INTO@LastName,@FirstName
END
CLOSEcontact_cursor
DEALLOCATEcontact_cursor
GO
9. SQL怎麼在存儲過程或觸發器中使用循環語句
這個觸發器是更新的時候操作;
表記錄的update實際上執行的是先delete後insert;
所以,如果要將觸發器裡面的sql代碼提取出來可以單獨執行的話,需要知道參數,可以把參數寫成存儲過程的參數,同時還需要留意觸發器中的特定執行條件,比如說當update某個欄位時才執行觸發器,這個條件也要考慮到存儲過程的sql邏輯中。
以上幾點建議僅供參考。
10. sql 循環調用存儲過程
你的語句里,@randCardID都是默認值,所以是重復的。
create table #temp(str char(19))
declare @randCardID char(19)
exec proc_randCardID @randCardID output
declare @num int
set @num = 0
while(@num <10)
begin
insert #temp select @randCardID
exec proc_randCardID @randCardID output
---這一句要改
set @num = @num +1
end
select * from #temp
drop table #temp