sql存儲過程for循環語句
㈠ 如何使用for循環更新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怎麼在存儲過程或觸發器中使用循環語句
這個觸發器是更新的時候操作;
表記錄的update實際上執行的是先delete後insert;
所以,如果要將觸發器裡面的sql代碼提取出來可以單獨執行的話,需要知道參數,可以把參數寫成存儲過程的參數,同時還需要留意觸發器中的特定執行條件,比如說當update某個欄位時才執行觸發器,這個條件也要考慮到存儲過程的sql邏輯中。
以上幾點建議僅供參考。
㈢ 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
㈣ 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
㈤ 如何在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為該存儲過程的參數,如果有多個參數,使用「,」分開就可以了,這也是存儲過程調用另一個存儲過程的一種方法。
這個是我從網上網路的 希望對你有用
㈥ oracle存儲過程循環執行SQL語句
實現方式錯了,批量移動數據應該使用Cursor,而不是像分頁那樣每次都查詢。
每次都查詢可能會導致重復數據。
正確方式應該是打開一個Cursor,循環Cursor來插入,使用計數器來控制每次COMMIT的行數:
declare
TYPE R_CURSOR IS REF CURSOR;
i number;
a1_cursor R_CURSOR;
a1_row A1%ROWTYPE;
begin
open a1_cursor FOR
select ID, NAME from A1;
i := 0;
loop
fetch a1_cursor
into a1_row;
exit when a1_cursor%notfound;
INSERT INTO A2 VALUES a1_row;
i := i + 1;
if i >= 5 then
commit;
i := 0;
end if;
end loop;
close a1_cursor;
commit;
end;
㈦ mysql sql中流程式控制制有for循環嗎
MySQL不支持FOR loops循環。
只有LOOP循環:
[begin_label:] LOOP
statement_list
END LOOP [end_label]
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE label1;
END IF;
LEAVE label1;
END LOOP label1;
SET @x = p1;
END;
LOOP實現了一個簡單的循環結構,允許重復執行語句列表,該列表由一個或多個語句組成,每個語句以分號(;)分隔符結束。 循環中的語句將重復執行,直到循環終止。 一般情況,通過LEAVE終止循環。 在函數中,也可以使用RETURN,它完全退出函數,也同時終止循環。
(7)sql存儲過程for循環語句擴展閱讀
mysql流程式控制制結構:
順序結構:程序從上往下依次執行,
分支結構:程序從兩條或多條路徑中選中一條去執行,
循環結構:程序在滿足一定條件的基礎上,重復執行一段代碼。
分支結構
1、if函數
功能:實現簡單的雙分支
語法:
if(表達式1,表達式2,表達式3)
執行順序:
如果表達式1成立,則if函數返回表達式2的值,否則返回表達式3的值
應用:任何地方(在begin end中或外面都可以)
2、case結構
情況1:類似於java中的switch語句,一般用於實現等值判斷
語法:
CASE 變數|表達式|欄位
WHEN 要判斷的值 THEN 返回的值1或語句1;
WHEN 要判斷的值 THEN 返回的值2或語句2;
...
ELSE 要返回的值n或語句n;
END CASE;
情況2:類似於java中的多重IF語句,一般用於實現區間判斷
語法;
CASE
WHEN 要判斷的條件1 THEN 返回的值1或語句1;
WHEN 要判斷的條件2 THEN 返回的值2或語句2;
...
ELSE 要返回的值n或語句n;
END CASE;
㈧ 存儲過程中For循環怎麼寫啊
方法和詳細的操作步驟如下:
1、第一步,編寫存儲過程的整體結構,定義變數,見下圖,轉到下面的步驟。
㈨ 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