日期:2014-05-17  浏览次数:20480 次

MS-SQL怎样在存储过程里实现自动编号?类似楼房小区编号?在线等
直入主题:

  现有一张数据表tb:
  房间编号(tb01)|楼盘号(tb02)|层数(tb03)|房间号(tb04)

  ------------------------------------------------------

  存储过程只要三个参数,楼盘号a,楼房层数b,房间数c。怎样在存储过程里实现如下思路:
   
  描述:现在想给房间自动编号,规则是:先得到总房间数b*c,然后再逐层编号,例如楼盘号是F1,层数为2,房间数为3,
  总的就是6间,编号应该是(一层一层的挨个编号):
   
  现在想通过存储过程生成插入上面6条语句,存储过程示例:myStoreProcess(F1,2,3)

  房间编号|楼盘号|层数|房间号
  F1-01-01 | F1 | 01 | 01
  F1-01-02 | F1 | 01 | 02
  F1-01-03 | F1 | 01 | 03
  F1-02-01 | F1 | 02 | 01
  F1-02-02 | F1 | 02 | 02
  F1-02-03 | F1 | 02 | 03

------解决方案--------------------
SQL code
--> 测试
IF OBJECT_ID('pmyStoreProcess') IS NOT NULL DROP PROC pmyStoreProcess
GO 
CREATE PROC pmyStoreProcess
@a VARCHAR(10),
@b INT,
@c INT 
AS
BEGIN
SELECT 房间编号=@a+'-'+RIGHT(100+a.number,2)+'-'+RIGHT(100+b.number,2),
       楼盘号=@a,
       层数=RIGHT(100+a.number,2),
       房间号=RIGHT(100+b.number,2)  
FROM master..spt_values a ,master..spt_values b 
WHERE a.number   BETWEEN 1 AND @b 
    AND b.number   BETWEEN 1 AND @c
    AND a.type='p'
    AND b.type='p'

END
go

--------------开始查询--------------------------
EXEC pmyStoreProcess 'F1',2,3
----------------结果----------------------------
/* 
房间编号    楼盘号    层数    房间号
F1-01-01    F1    01    01
F1-01-02    F1    01    02
F1-01-03    F1    01    03
F1-02-01    F1    02    01
F1-02-02    F1    02    02
F1-02-03    F1    02    03
*/