如果要得到如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)