由于工作的需要,了解下SQL Server 2005 函數的寫法,現在總結一下:
對于SQL Server 2005 數據庫而言,函數與存儲過程在語法方面是有很大的相同點,
最大的不同就是函數有返回值,直接使用returns ,而存儲過程則使用output來聲明輸出變量
一、下面先說明下,如何創建函數
1、創建沒有返回值與沒有參數的函數
CREATE FUNCTION my_function()
AS
BEGIN
DECLARE @variable varchar(255) --聲明字符型變量
DECLARE @variable int --聲明整形型變量
(do something)
SET @variable = '12345' --對變量variable賦值
END
2、創建沒有返回值有參數的函數
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()函數是將int型轉為varchar型
END
3、創建有返回值與有參數的函數
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
二、刪除一個函數語法
DROP FUNCTION my_function
三、執行一個函數語法
select dbo.my_function(
) --根據有沒參數來處理
go
--注:在SQL Server 2005 中,有內部函數與外部函數,數據庫系統自帶函數,如sum(),count()等等,這些稱為內部函數,而我們自定義的函數稱為外部函數。
--在執行函數語法中,也有些區別,如執行內部函數:select sum(total) from
,那么執行外部函數則需要在函數名前加dbo. + 自定義函數名,如
--select dbo.my_function()
--go
四、下面提供二個例子
1、日期判斷,判斷傳進來的日期是否在上個月日到本月日之間
--請注意convert()函數的用法
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表中,進行分行換行顯示,其中使用游標進行循環處理
--在數據庫中,EXECL默認換行符ACSII碼為'10',在合并字符串之前,需要先轉為EXECL識別的換行符,具體使用chat()內部函數處理
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) --循環開始
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 數據庫而言,函數與存儲過程在語法方面是有很大的相同點,
最大的不同就是函數有返回值,直接使用returns ,而存儲過程則使用output來聲明輸出變量
一、下面先說明下,如何創建函數
1、創建沒有返回值與沒有參數的函數
CREATE FUNCTION my_function()
AS
BEGIN
DECLARE @variable varchar(255) --聲明字符型變量
DECLARE @variable int --聲明整形型變量

SET @variable = '12345' --對變量variable賦值
END
2、創建沒有返回值有參數的函數
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()函數是將int型轉為varchar型
END
3、創建有返回值與有參數的函數
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
二、刪除一個函數語法
DROP FUNCTION my_function
三、執行一個函數語法
select dbo.my_function(

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

--select dbo.my_function()
--go
四、下面提供二個例子
1、日期判斷,判斷傳進來的日期是否在上個月日到本月日之間
--請注意convert()函數的用法
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表中,進行分行換行顯示,其中使用游標進行循環處理
--在數據庫中,EXECL默認換行符ACSII碼為'10',在合并字符串之前,需要先轉為EXECL識別的換行符,具體使用chat()內部函數處理
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) --循環開始
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