存儲過程和函數類似於Java中的方法。
⒈存儲過程
一組預先編譯好的sql語句的集合,理解成批處理語句。
好處:
①提高代碼的重用性
②簡化操作
③減少了編譯次數並且減少了和數據庫服務器的連接次數,提高了效率
1.創建語法
1 if OBJECT_ID(N'procName',N'P') is not null 2 drop proc procName 3 create proc /*procedure*/ procName 4 @paramName paramType /*= '默認值' output*/ 5 as 6 sql 7 go
參數帶output則為輸出參數
2.調用語法。
1 exec 存儲過程名(實參列表);
3.刪除存儲過程
1 drop proc /*procedure*/ 存儲過程名;
4.查看存儲過程的信息
1 exec sp_helptext '存儲過程名';
⒉函數
函數和存儲過程意義和好處都是一樣的。它們的唯一區別就是:
存儲過程可以沒有返回值,也可以有多個返回值,適合做批量插入數據、批量更新等。
函數必須有返回值,而且只能有1個,適合做處理數據后返回1個結果。
1.創建語法
①標量函數--即返回的結果只是一個標量,通俗的講返回的結果就是一種類型的一個值。
創建:
1 create function funName(@paramName paramType) 2 returns returnType 3 as 4 begin 5 sql 6 end 7 go
調用:
select dbo.函數名(參數列表);
②內聯表值函數--即返回的是一張表數據。
創建:
1 create function funName(@paramName paramType) 2 returns table 3 as 4 return (select * from Table) 5 go
調用:
1 select * from funName();
③多語句表值函數--即通過多條語句來創建Table類型的數據,由我們自行指定具體的Table類型的結構
創建:
1 create function funName() 2 returns @result table( 3 id int, 4 username varchar(20) 5 ) 6 as 7 begin 8 insert into @result select id,username from Study.dbo.users 9 return 10 end 11 go
調用:
1 select * from funName();
2.刪除函數
1 drop function 函數名;
3.查看函數
1 exec sp_helptext '函數名';
1 select definition from sys.all_sql_modules sm 2 3 inner join sys.all_objects ao on sm.object_id = ao.object_id 4 5 where name ='functionName'and type ='FN'
