当前位置:首页 » 编程语言 » 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