获取人员流水编号函数
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'