當前位置:首頁 » 編程語言 » sql能寫函數嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql能寫函數嗎

發布時間: 2023-04-24 14:37:45

1. sql中如何寫函數

/*
獲取兩個數值的大小
0:小於;1:大於;2:等於
*/
CREATE function GetMax(@qty1 varchar(50),@qty2 varchar(50))
returns int
begin
declare @Num int
if (convert(decimal(18,5),@qty1)-convert(decimal(18,5),@qty2) >0)
begin
set @Num=1
end
else if (convert(decimal(18,5),@qty1)-convert(decimal(18,5),@qty2) <0)
begin
set @Num=0
end
else
begin
set @Num=2
end

return @Num
end

2. 執行動態SQL語句的函數怎麼寫

執行動態SQL語句的函數怎麼寫
其實你這你都知道用函數實現不了的,因為你的輸入參數@SQL是動態的,那必須用exec執行,而函數里不能用exec。建議你用存儲過程實現,示例如下:

創建存儲過程:
create procere TEST
(
@SQL NVARCHAR(200),
@RE INT output
)
AS
BEGIN
set nocount on
if exists (select * from tempdb.dbo.sysobjects where xtype='U' and id=object_id('#test'))
drop table #test

create table #test(total int)
insert into #test
exec (@SQL)
select @RE=isnull(total,0) from #test
set nocount off
END

調用示例:
declare @RE int
exec TEST 'select 1+1',@RE output
PRINT @RE

結果:
2

3. sql server 函數編寫

函數如下:

createfunctiondbo.test(@snvarchar(max))
returnsnvarchar(max)
as
begin
declare@idxint,@spiltCharnvarchar(10),@vnvarchar(max)
declare@tbtable(txtnvarchar(max),order_idxintidentity(1,1))
select@spiltChar=';',@idx=1

while@idx>0
begin
set@idx=charindex(@spiltChar,@s)
if@idx>0
begin
set@v=left(@s,@idx-1)
set@s=right(@s,len(@s)-@idx)

insertinto@tb(txt)
select@v
where@v!=''andnotexists
([email protected]=@v)
end
else
begin
insertinto@tb(txt)
select@s
where@s!=''andnotexists
([email protected]=@s)
end
end
set@v=''
select@v=@v+s.txt+';'
from@tbs
orderbys.txt
return@v
end
go

調用:

selectdbo.test('a;a;b;c;d;b;c;')

4. SQL如何編制一個函數

create function funCharToDistinct(@char varchar(max),@splitChar varchar(1000))
returns varchar(max)
as
begin
declare @returnChar varchar(max) select @returnChar=''
while(charindex(@splitChar,@char)>0)
begin
select @returnChar=@returnChar+ left(@char,charindex(@splitChar,@char))
select @char=replace(@char,left(@char,charindex(@splitChar,@char)),'前歷薯慧者')
end
return (@returnChar)
end
go
--TEST:
declare @char varchar(max) select @char='a;a;b;c;d;b;c;'
select dbo.funCharToDistinct(@char,';')
輸出結爛悄果:

-----------
a;b;c;d;
(1 行受影響)

5. Sql中怎麼寫函數

create function getminvalue (@inputid int,@startv int,@endv int) returns int as begin declare @rv int select @rv=isnull((select top 1 ccc from ( select aa as ccc from b where id=@inputid and aa>@startv union select bb as ccc from b where id=@inputid and bb>@startv ) cc order by cc.ccc),@endv) return @rv end

6. 使用SQL語言編寫UPPER函數

  1. SQL關鍵字或函數 UPPER() ,轉換成大寫函數

  2. SQL 實列如下:

  3. declare @T nvarchar(5)

  4. set @T='AbcdE'

  5. select UPPer(@T)

  6. 結果如下:ABCDE

7. SQL函數編寫

create function f_Count(@value varchar(10))
returns int
as
begin
declare @a int
select @a=count(*) from b where s=@value
return @a
end
然後沖野察散茄脊神:
select s,dbo.f_count(s) from a

8. 如何在SQL語句中使用FUNCTION

1、function是SQL的函數
是由一個或多個 Transact-SQL 語句組成的子程序,可用於封裝代碼以便重新使用。Microsoft® SQL Server™ 並不將用戶限制在定義為 Transact-SQL 語言一部分的內置函數上,而是允許用戶創建自己的用戶定義函數。
可使用 CREATE FUNCTION 語句創建、使用 ALTER FUNCTION 語句修改、以及使用 DROP FUNCTION 語句除去用戶定義函數。每個完全合法的用戶定義函數名 (database_name.owner_name.function_name) 必須唯一。
必須被授予 CREATE FUNCTION 許可權才能創建、修改或除去用戶定義函數。不是所有者的用戶在 Transact-SQL 語句中使用某個函數之前,必須先給此用戶授予該函數的適當許可權。若要創建或更改在 CHECK 約束、DEFAULT 子句或計算列定義中引用用戶定義函數的表,還必須具有函數的 REFERENCES 許可權。
在函數中,區別處理導致刪除語句並且繼續在諸如觸發器或存儲過程等模式中的下一語句的 Transact-SQL 錯誤。在函數中,上述錯誤會導致停止執行函數。接下來該操作導致停止喚醒調用該函數的語句。
用戶定義函數的類型
2、Procere是SQL的存儲過程
存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。在ORACLE中,若干個有聯系的過程可以組合在一起構成程序包。
存儲過程是利用SQL Server所提供的Transact-SQL語言所編寫的程序。Transact-SQL語言是SQL Server提供專為設計資料庫應用程序的語言,它是應用程序和SQL Server資料庫間的主要程序式設計界面。它好比Oracle資料庫系統中的PL-SQL和 Informix的資料庫系統結構中的Informix- 4GL語言。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變數說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內部函數

9. sql 創建函數

USE xx
go
create function ST_FUN(@XH varchar(20))
returns TABLE
as
return (select s.[S#] as 學號,s.sname as 姓名,sc.grade as 成績 from s , sc where s.[s#]=sc.[s#] and s.[s#]=@xh )
go
select * from dbo.ST_FUN(2001)
go

CREATE TRIGGER ST_TRI
ON SC
FOR INSERT
AS
declare @XH varchar(20)
select @xh = [S#] from SC
if not exists(select * from S where [S#]=@xh)
ROLLBACK TRANSACTION
GO
insert into sc values ('9999','1','99')

10. 自己編寫sql函數

create function [dbo].[Get_StrArrayStrOfIndex]
(
@str varchar(1024), --要分割的字元串
@split varchar(10), --分隔符號
@index int --取第幾個元素
)
returns varchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int

set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)

set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
end
if @location =0 select @location =len(@str)+1
--這兒存在兩種情況:1、字元串不存在分隔符號 2、字元串中存在分隔符號,跳出while循環後,@location為0,那默認為字元串後邊有一個分隔符號。

return substring(@str,@start,@location-@start)
end

使用舉例:
select id,code=dbo.Get_StrArrayStrOfIndex(code,'.',4) from code_table