sql 自定义函数复习

获取人员流水编号函数

CREATE  FUNCTION [dbo].[f_PersonRunningCode]()

RETURNS varchar(11)
AS
BEGIN
    DECLARE @currentcode VARCHAR(20)
    SET @currentcode=(SELECT TOP 1 personcode FROM app_PersonInfo ORDER BY PrimaryKey DESC)
    RETURN     SUBSTRING(@currentcode,0,4)+CAST((SUBSTRING(@currentcode,4,8)+1) AS VARCHAR)
END
函数使用:

SELECT [dbo].[f_PersonRunningCode]() 'PersonCode'


20110725修改 左边位数不够7位,自动补0

--临时表
--临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,
--本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。
--全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,
--将删除全局临时表。
--本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。
--全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

CREATE TABLE #app_PersonInfo
(
primarykey INT IDENTITY(1,1) PRIMARY KEY,
personname VARCHAR(50),
personcode VARCHAR(50)
)

SELECT * FROM #app_PersonInfo

INSERT INTO #app_PersonInfo(personname,personcode) VALUES('aaaaa','aaa000001')

CREATE  FUNCTION [dbo].[f_PersonRunningCode]()
RETURNS varchar(11)
AS
BEGIN
    DECLARE @currentcode VARCHAR(20)
    SET @currentcode=(SELECT TOP 1 personcode FROM #app_PersonInfo ORDER BY PrimaryKey DESC)
    RETURN     SUBSTRING(@currentcode,0,4)+CAST((SUBSTRING(@currentcode,4,8)+1) AS VARCHAR)
END
--报错无法从函数中访问临时表。

1.使用表变量

ALTER  FUNCTION [dbo].[f_PersonRunningCode]()
RETURNS varchar(11)
AS
BEGIN
    DECLARE @currentcode VARCHAR(20)
    --使用表变量
    DECLARE @app_PersonInfo table   
    (   
        primarykey INT IDENTITY(1,1) PRIMARY KEY,
        personname VARCHAR(50),
        personcode VARCHAR(50)
    )
    --向表变量中插入数据
    INSERT INTO @app_PersonInfo(personname,personcode) VALUES('aaaaa','aaa000001')
    SET @currentcode=(SELECT TOP 1 personcode FROM @app_PersonInfo ORDER BY PrimaryKey DESC)
    RETURN     SUBSTRING(@currentcode,0,4)+right('000000'+ CAST((SUBSTRING(@currentcode,4,8)+1) AS VARCHAR),7)
END

SELECT [dbo].[f_PersonRunningCode]() 'PersonCode'

2.创建永久表app_person
ALTER  FUNCTION [dbo].[f_PersonRunningCode]()
RETURNS varchar(11)
AS
BEGIN
    DECLARE @currentcode VARCHAR(20)
    SET @currentcode=(SELECT TOP 1 personcode FROM app_PersonInfo ORDER BY PrimaryKey DESC)
    RETURN     SUBSTRING(@currentcode,0,4)+right('000000'+ CAST((SUBSTRING(@currentcode,4,8)+1) AS VARCHAR),7)
END

SELECT [dbo].[f_PersonRunningCode]() 'PersonCode'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值