SQL中的函數運用

--1,SQL中的函數,a,Sql中的內置函數,b,標量函數,c,表值函數
--2,內置函數,有系統提供不能修改
--3,標量函數,用戶自定義的函數返回單個值
--4,表值函數,返回表值
--5,優點,允許模塊化開發,可以重複利用速度更快,減少網絡流量
--6,

iF EXISTS (select * from sys.databases where name='netBarDB')
	drop database netBarDB
create database netBarDB
go
use netBarDB
go
create table cardInfo
(
	cardId int primary key identity,
	cardNo nvarchar(16),
	cardPassword nvarchar(16),
	transactTime datetime ,
	cardBalance money
)
go
insert cardInfo values('100-1','123456',GETDATE(),0)
insert cardInfo values('100-20','123456',GETDATE(),1)
insert cardInfo values('100-18','123456',GETDATE(),100)
insert cardInfo values('100-8','123456',GETDATE(),20)
insert cardInfo values('100-9','123456',GETDATE(),30)
insert cardInfo values('100-10','123456',GETDATE(),40)
--創建標量函數
go
create function  getCardNo(@id int)  --函數名及需要的參數
returns nvarchar(16)                --返回值類型,returns要加  S  
as
	begin
		declare @cardNo nvarchar(16)
		select  @cardNo=cardNo from cardInfo where cardId=@id
		return @cardNo  --返回需要的數據
	end
go
select dbo.getCardNo(1)   --調用函數'
--查看自定義函數
sp_help 'getCardNo'
--刪除標量函數
drop function getCardNo
--返回表值函數
go
create function getAll(@id int)
returns table
as
	return
		select * from cardInfo where cardId=@id
go
--調用表值函數
select * from getAll(1)
--修改函數
go
alter function  getAll(@no nvarchar(16))
returns table
as
	return
		select * from cardInfo where cardNo=@no
go
select * from getAll('100-1')
--什麼時候使用存儲過程和函數

1,返回單個結果集的用表值函數比較好效率
2,邏輯上可以用單個select 
3,不執行更新操作
4,不需要動態execute 
5,返回一個結果集
6,需要用到臨時表的
以上用表值函數比較好

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章