由于工作的需要,了解下SQL Server 2005 函數(shù)的寫法,現(xiàn)在總結一下:
對于SQL Server 2005 數(shù)據(jù)庫而言,函數(shù)與存儲過程在語法方面是有很大的相同點,
最大的不同就是函數(shù)有返回值,直接使用returns ,而存儲過程則使用output來聲明輸出變量
一、下面先說明下,如何創(chuàng)建函數(shù)
1、創(chuàng)建沒有返回值與沒有參數(shù)的函數(shù)
CREATE FUNCTION my_function()
AS
BEGIN
DECLARE @variable varchar(255) --聲明字符型變量
DECLARE @variable int --聲明整形型變量
(do something)
SET @variable = '12345' --對變量variable賦值
END
2、創(chuàng)建沒有返回值有參數(shù)的函數(shù)
CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))
AS
BEGIN
DECLARE @variable_1 varchar(255) --聲明字符型變量
(do something)
SET @variable_1 = @user_Name + convert(varchar(255),@password) --將變量@user_Name與@password連接賦給@variable_1,其中convert()函數(shù)是將int型轉為varchar型
END
3、創(chuàng)建有返回值與有參數(shù)的函數(shù)
CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))
returns varchar(255)--設置返回值,記住是returns 而不是return
AS
BEGIN
DECLARE @result varchar(5)
DECLARE @fagle varchar(5)
SET @result = select users.user_Name from USERS as users where users.user_Name = @user_Name and users.password = @password
IF @result = ''
BEGIN
SET @fagle = 'NO'
END
ELSE
BEGIN
SET @falge = 'YES'
END
return @result --返回結果
END
二、刪除一個函數(shù)語法
DROP FUNCTION my_function
三、執(zhí)行一個函數(shù)語法
select dbo.my_function(
) --根據(jù)有沒參數(shù)來處理
go
--注:在SQL Server 2005 中,有內部函數(shù)與外部函數(shù),數(shù)據(jù)庫系統(tǒng)自帶函數(shù),如sum(),count()等等,這些稱為內部函數(shù),而我們自定義的函數(shù)稱為外部函數(shù)。
--在執(zhí)行函數(shù)語法中,也有些區(qū)別,如執(zhí)行內部函數(shù):select sum(total) from
,那么執(zhí)行外部函數(shù)則需要在函數(shù)名前加dbo. + 自定義函數(shù)名,如
--select dbo.my_function()
--go
四、下面提供二個例子
1、日期判斷,判斷傳進來的日期是否在上個月日到本月日之間
--請注意convert()函數(shù)的用法
create function isNewContract(@date varchar(32))
returns varchar(32)
AS
begin
declare @begin_time varchar(32)
declare @end_time varchar(32)
declare @temp varchar(4)
declare @result varchar(32)
declare @month varchar(2)
set @begin_time=convert(varchar,DATEPART(year, getdate())) + '-'
set @end_time=convert(varchar,DATEPART(year, getdate())) + convert(varchar, DATEPART(month, getdate())) + convert(varchar, '14')
set @temp=convert(varchar(2),(month(getDate())-1 ))
if(@temp < 10 )
begin
set @begin_time = @begin_time + convert(varchar(1),'0') + @temp + '-' + convert(varchar, '15')
end
if(@date >= @begin_time and @date <= @end_time)
begin
set @result = '是'
end
else
begin
set @result = @begin_time
end
return @result
end
2、查詢多條記錄合并成一條記錄返回,并寫入EXECL表中,進行分行換行顯示,其中使用游標進行循環(huán)處理
--在數(shù)據(jù)庫中,EXECL默認換行符ACSII碼為'10',在合并字符串之前,需要先轉為EXECL識別的換行符,具體使用chat()內部函數(shù)處理
create function getExportReportCollect(@projectId int ,@month varchar(64))
returns varchar(4096) --設置返回值
AS
begin
declare @num varchar(2)
declare @end varchar(10)
declare @Result varchar(4096) --用于返回查詢結果
declare city_cursor cursor for --聲明游標變量
select reported.id
from dbo.Investment_Budget_Reported as reported
left join dbo.Investment_Budget_Contract as con
on reported.contractId = con.id
where reported.[month] = @month and reported.projectId = @projectId
set @Result=''
set @num = '1'
set @end = '10' --導入EXECL表中,換行符的ACSII碼
declare @Field int --聲明臨時存放CityID的變量
open city_cursor --打開游標
fetch next from city_cursor into @Field --將實際ID賦給變量
while(@@fetch_status = 0) --循環(huán)開始
begin
if((select [content] from dbo.Investment_Budget_Reported where id = @Field )is not null)
BEGIN
if(@Result = '')
select @Result = @Result + @num + '、' + [content] from dbo.Investment_Budget_Reported where id = @Field
else
select @Result = @Result + @num + '、' + [content] from dbo.Investment_Budget_Reported where id = @Field
set @Result = @Result + char(@end) --讓換行符轉為EXECL認識的換行符
set @num = @num + 1
END
fetch next from city_cursor into @Field --下一個reportId
end
close city_cursor --關閉游標
deallocate city_cursor --釋放游標引用
return @Result
end
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhdd1234/archive/2009/10/27/4734789.aspx
對于SQL Server 2005 數(shù)據(jù)庫而言,函數(shù)與存儲過程在語法方面是有很大的相同點,
最大的不同就是函數(shù)有返回值,直接使用returns ,而存儲過程則使用output來聲明輸出變量
一、下面先說明下,如何創(chuàng)建函數(shù)
1、創(chuàng)建沒有返回值與沒有參數(shù)的函數(shù)
CREATE FUNCTION my_function()
AS
BEGIN
DECLARE @variable varchar(255) --聲明字符型變量
DECLARE @variable int --聲明整形型變量

SET @variable = '12345' --對變量variable賦值
END
2、創(chuàng)建沒有返回值有參數(shù)的函數(shù)
CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))
AS
BEGIN
DECLARE @variable_1 varchar(255) --聲明字符型變量

SET @variable_1 = @user_Name + convert(varchar(255),@password) --將變量@user_Name與@password連接賦給@variable_1,其中convert()函數(shù)是將int型轉為varchar型
END
3、創(chuàng)建有返回值與有參數(shù)的函數(shù)
CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))
returns varchar(255)--設置返回值,記住是returns 而不是return
AS
BEGIN
DECLARE @result varchar(5)
DECLARE @fagle varchar(5)
SET @result = select users.user_Name from USERS as users where users.user_Name = @user_Name and users.password = @password
IF @result = ''
BEGIN
SET @fagle = 'NO'
END
ELSE
BEGIN
SET @falge = 'YES'
END
return @result --返回結果
END
二、刪除一個函數(shù)語法
DROP FUNCTION my_function
三、執(zhí)行一個函數(shù)語法
select dbo.my_function(

go
--注:在SQL Server 2005 中,有內部函數(shù)與外部函數(shù),數(shù)據(jù)庫系統(tǒng)自帶函數(shù),如sum(),count()等等,這些稱為內部函數(shù),而我們自定義的函數(shù)稱為外部函數(shù)。
--在執(zhí)行函數(shù)語法中,也有些區(qū)別,如執(zhí)行內部函數(shù):select sum(total) from

--select dbo.my_function()
--go
四、下面提供二個例子
1、日期判斷,判斷傳進來的日期是否在上個月日到本月日之間
--請注意convert()函數(shù)的用法
create function isNewContract(@date varchar(32))
returns varchar(32)
AS
begin
declare @begin_time varchar(32)
declare @end_time varchar(32)
declare @temp varchar(4)
declare @result varchar(32)
declare @month varchar(2)
set @begin_time=convert(varchar,DATEPART(year, getdate())) + '-'
set @end_time=convert(varchar,DATEPART(year, getdate())) + convert(varchar, DATEPART(month, getdate())) + convert(varchar, '14')
set @temp=convert(varchar(2),(month(getDate())-1 ))
if(@temp < 10 )
begin
set @begin_time = @begin_time + convert(varchar(1),'0') + @temp + '-' + convert(varchar, '15')
end
if(@date >= @begin_time and @date <= @end_time)
begin
set @result = '是'
end
else
begin
set @result = @begin_time
end
return @result
end
2、查詢多條記錄合并成一條記錄返回,并寫入EXECL表中,進行分行換行顯示,其中使用游標進行循環(huán)處理
--在數(shù)據(jù)庫中,EXECL默認換行符ACSII碼為'10',在合并字符串之前,需要先轉為EXECL識別的換行符,具體使用chat()內部函數(shù)處理
create function getExportReportCollect(@projectId int ,@month varchar(64))
returns varchar(4096) --設置返回值
AS
begin
declare @num varchar(2)
declare @end varchar(10)
declare @Result varchar(4096) --用于返回查詢結果
declare city_cursor cursor for --聲明游標變量
select reported.id
from dbo.Investment_Budget_Reported as reported
left join dbo.Investment_Budget_Contract as con
on reported.contractId = con.id
where reported.[month] = @month and reported.projectId = @projectId
set @Result=''
set @num = '1'
set @end = '10' --導入EXECL表中,換行符的ACSII碼
declare @Field int --聲明臨時存放CityID的變量
open city_cursor --打開游標
fetch next from city_cursor into @Field --將實際ID賦給變量
while(@@fetch_status = 0) --循環(huán)開始
begin
if((select [content] from dbo.Investment_Budget_Reported where id = @Field )is not null)
BEGIN
if(@Result = '')
select @Result = @Result + @num + '、' + [content] from dbo.Investment_Budget_Reported where id = @Field
else
select @Result = @Result + @num + '、' + [content] from dbo.Investment_Budget_Reported where id = @Field
set @Result = @Result + char(@end) --讓換行符轉為EXECL認識的換行符
set @num = @num + 1
END
fetch next from city_cursor into @Field --下一個reportId
end
close city_cursor --關閉游標
deallocate city_cursor --釋放游標引用
return @Result
end
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhdd1234/archive/2009/10/27/4734789.aspx