語法結構
create procedure pro_name
-- 引數1 型別
-- ... ...
-- 引數n 型別 output --返回引數
as begin
--過程**
endgo
傳參,接收返回值方式
create procedure colo2
@iret int output -- 返回引數
asbegin
declare @var varchar(10)
set @var = 'a'
select @iret =
case when @var='a' then 0 -- case的多重使用
when @var='b' then 1
when @var='c' then 2
when @var='d' then 3
else -1
endendgo
declare @k int
exec colo2 @k output -- 執行儲存過程,並且用@k接受引數
select @k -- 檢視@k
drop procedure colo2 -- 刪除儲存過程
宣告變數、變數賦值、while的使用
-- 宣告變數
declare @變數1 型別
-- 變數賦值
set @變數1 = 值
--while
while 條件
begin
迴圈主主體
end-- 如何接受儲存過程中產生的表檢視
---定義部分 儲存過程中產生了乙個結果集
create procedure p_3
as select 1 as id,'xiaoli' as name
union
select 2 as id,'xiaowang' as name
select 3 id,'xiaozhang' name
union
select 4 id,'xiaozhao' name
--注意如果有兩次查詢,那麼這兩次查詢返回的資料表的結構必需是一樣的.
drop procedure p_3
--執行部分
declare @tab as table(
id int
,name nvarchar(20)
)insert into @tab(id,name)
execute p_3
select * from @tab
常用方法
set nocount on; --返回計數 影響行數
set xact_abort on; --注意這裡一定要寫xact_abort為on 才能保持事務的特性
begintry
begin tran
--sql語句
commit tran
endtry
begincatch
if xact_state()=-1
rollback tran
endcatch
--定義游標
declare 游標名 cursor for
《選擇檢視》
--使用游標
open 游標名
fetch next from 游標名 into <@接收變數》
--注意,接收變數的個數要等於從游標中取出來的個數,並且變數型別同遊標值型別一致
--迴圈取值
while @@fetch_status=0
begin
--拿接收到的值進行需求操作
fetch next from 游標名 into <@接收變數》
endclose 游標名
deallocate 游標名
-- while迴圈取值時 常用到的函式有
--1. 判斷該游標資料id是否在目標表中存在? not exists()
if not exists(select * from table_name where tabel_name.id = @游標中接收的id變數)
begin
-- 進一步操作
end--2. 查詢滿足條件的記錄行數 count(1)
declare @i int
set @i = 0
select @i=count(1) from table_name
select @i
sql service 儲存過程,游標的使用
1 建表 drop table dbo.users gocreate table dbo.users id int not null name varchar 32 null go alter table dbo.users add primary key id go2 新增資料 刪除儲存過程 if...
mysql 儲存過程 游標的使用
儲存過程 create procedure changefrozen begin 定義變數 declare i int default 0 declare d int default 0 declare y id int declare y uid int declare y task id int...
oracle 儲存過程和游標的使用
1 編寫乙個函式,輸入員工編號將每位員工工作了多少年零多少月零多少天輸出來 如 年份 x 月份 xx 天數 xx create or replace procedure proc workofyear eno number iscursor curs workofyear is select ena...