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'

### 关于 SQL复习资料与学习笔记 #### 1. SQL Server 中的 SELECT 语句基础 SQL 是一种用于管理和操作关系型数据库的语言,其中 `SELECT` 语句是最常用的命令之一。通过 `SELECT` 语句可以实现从单个表或多张表中提取所需的数据[^1]。 基本语法如下所示: ```sql SELECT column_name(s) FROM table_name; ``` 如果需要筛选特定条件下的记录,则可以通过 `WHERE` 子句来完成。例如: ```sql SELECT * FROM Employees WHERE DepartmentID = 5 AND Salary > 3000; ``` 此外,在处理大量数据时,还可以利用聚合函数(如 COUNT、SUM、AVG 等)以及分组功能 GROUP BY 来统计分析数据。 #### 2. 存储过程中自定义结束符的应用 在创建复杂的存储过程时,默认以分号 (`;`) 表示每一条单独 SQL 命令结束。然而对于整个逻辑单元而言,可能并不希望立即执行这些中间状态的结果。此时就需要重新设置 DELIMITER 符号以便区分实际运行界限[^2]。 例如,在 MySQL 下面的例子展示了如何构建一个简单的累加器程序: ```sql DELIMITER // CREATE PROCEDURE add_num(IN n INT) BEGIN DECLARE i INT DEFAULT 1; DECLARE sum INT DEFAULT 0; WHILE i <= n DO SET sum = sum + i; SET i = i + 1; END WHILE; SELECT sum AS total_sum; END// DELIMITER ; ``` 此脚本首先更改默认终止标记为双斜杠(`//`),接着定义了一个名为 `add_num` 的新存储过程,最后恢复标准行为即使用分号作为指令终结标志位。 #### 3. 修改现有数据库对象属性实例——调整文件尺寸 除了查询外,有时也需要维护物理层面的对象特性比如改变某个已存在数据文件的空间分配情况。下面给出了一段关于怎样把叫做 'Students' 这个数据文件扩大到至少八兆字节容量的操作示范[^3]: ```sql ALTER DATABASE YourDatabaseName MODIFY FILE ( NAME = Students, SIZE = 8MB ); ``` 以上命令将会更新指定名称的数据文件至最小允许的新大小值上去了。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值