SQL 存储过程 CS_00000001 生成流水帐号

 

如果要得到如CS_00000001,CS_00000002,CS_00000003的流水帐号
如下存储过程

Create PROCEDURE [dbo].[sp_Room_Code]
      @CodeID varchar(11) output  --// CS_00000001 流水帐号的长度,这里我用11位
AS

   declare @num int                      --//定义一个

   select @num = Max(cast(substring(Room_Code,3,4)as int)) from YourTable
                                                    --//得到 Room_Code 流水帐号字段后最大的一个,暂存@num
                                                    --这一句用到三个 SQL 函数 分别是 Max,cast,substring,它们的用法可以参考Server自带的帮助文档。
   set @num = @num + 1             --//增加1

   set @CodeID= 'cs_' + right('00000000'+cast(@num as varchar(8)),8)
                                                   --//这一句是生成流水帐号的关键
   --//它的格式是 right(长度为流水帐号数字长度等长的填充字符串 + cast(@num as 流水帐号数字长度)),流水帐号长度)
    --// 这里用到 right函数


GO




SQL Server联机丛书上函数的参考

MAX
返回表达式的最大值。

语法
MAX ( [ ALL | DISTINCT ] e­xpression )

参数
ALL

对所有的值进行聚合函数运算。ALL 是默认设置。

DISTINCT

指定每个唯一值都被考虑。DISTINCT 对于 MAX 无意义,使用它仅仅是为了符合 SQL-92 兼容性。

e­xpression

常量、列名、函数以及算术运算符、按位运算符和字符串运算符的任意组合。MAX 可用于数字列、字符列和 datetime 列,但不能用于 bit 列。不允许使用聚合函数和子查询。

返回类型
返回类型与 e­xpression 相同。



重要  当使用 CUBE 或 ROLLUP 时,不支持区分聚合,例如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用,则 Microsoft® SQL Server™ 将返回错误信息并取消查询。


注释
MAX 忽略任何空值。

对于字符列,MAX 查找排序序列的最大值。

示例
下面的示例返回年度销售额最高的书。

USE pubs
GO
Select MAX(ytd_sales)
FROM titles
GO

下面是结果集:

-----------
22246        

(1 row(s) affected)

Warning, null value eliminated from aggregate.


=======================================================

SUBSTRING
返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。

语法
SUBSTRING ( e­xpression , start , length )

参数
e­xpression

是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。

start

是一个整数,指定子串的开始位置。

length

是一个整数,指定子串的长度(要返回的字符数或字节数)。



说明  由于在 text 数据上使用 SUBSTRING 时 start 和 length 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。

下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。

USE pubs
Select au_lname, SUBSTRING(au_fname, 1, 1)
FROM authors
orDER BY au_lname

下面是结果集:

au_lname                                  
---------------------------------------- -
Bennet                                   A
Blotchet-Halls                           R
Carson                                   C
DeFrance                                 M
del Castillo                             I
...
Yokomoto                                 A

(23 row(s) affected)

下例显示如何显示字符串常量 abcdef 中的第二个、第三个和第四个字符。

Select x = SUBSTRING('abcdef', 2, 3)

下面是结果集:

x
----------
bcd

(1 row(s) affected)


=======================================================

RIGHT
返回字符串中从右边开始指定个数的 integer_e­xpression 字符。

语法
RIGHT ( character_e­xpression , integer_e­xpression )

参数
character_e­xpression

由字符数据组成的表达式。character_e­xpression 可以是常量、变量,也可以是字符或二进制数据的列。

integer_e­xpression

是起始位置,用正整数表示。如果 integer_e­xpression 是负数,则返回一个错误。

返回类型
varchar

character_e­xpression 必须为可隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_e­xpression。

注释
兼容级别可能影响返回值。有关更多信息,请参见 sp_dbcmptlevel。

示例
下例返回每个作者名字中最右边的五个字符。

USE pubs
GO
Select RIGHT(au_fname, 5)
FROM authors
orDER BY au_fname
GO

下面是结果集:

------------------
raham
Akiko
lbert
Ann  
Anne  
Burt  
rlene
heryl
Dean  
Dirk  
ather
Innes
hnson
Livia
jorie
ander
chael
ichel
gstar
inald
heryl
earns
ylvia
(23 row(s) affected)
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值