创建用户友好的数据表主键ID

         由于搜索引擎越来越强大,甚至于如果你的网页没有被搜索引擎搜索到,那么你的网页将深深的埋在80多亿的网页之下!
        因此,越来越多的网页都执行了URL重写,以达到URL友好,搜索引擎友好!所以构建一个用户友好的主键ID利于url重写时进行更好的分析!
        以下是我提供的一个sql存储过程,可以按年月日生成用户友好的主键ID。欢迎指点!
ExpandedBlockStart.gif ContractedBlock.gif /**/ /*
InBlock.gif    生成一个按年月日连续的ID
InBlock.gif    (基于特定表的,只需要设置[Application.TableKey].TableID
InBlock.gif    及最后生成@NextID时把TableID的值嵌进去即可)
InBlock.gif    如果表名在表[Application.TableKey]不存在,则自动创建一条记录
InBlock.gif    生成的ID形如:
InBlock.gif    200605151(2006年5月15日的第一条记录)
InBlock.gif    2006051510(2006年5月15日的第十条记录)
InBlock.gif    200605161(2006年5月16日的第一条记录)
InBlock.gif    2006061610(2006年6月16日的第十条记录)
ExpandedBlockEnd.gif
*/

None.gif
None.gif
IF   EXISTS  ( SELECT   *   FROM  sysobjects  WHERE  type  =   ' P '   AND  name  =   ' Application.spGetNextID ' )
None.gif    
BEGIN
None.gif        
DROP    Procedure    [ Application.spGetNextID ]
None.gif    
END
None.gif
None.gif
GO
None.gif
None.gif
CREATE   Procedure   [ Application.spGetNextID ]
None.gif    
@TableName   nvarchar ( 50 ),
None.gif    
@NextID   bigint = null  output
None.gif
AS
None.gif    
set  nocount  on
None.gif    
None.gif    
declare   @Year   int
None.gif    
declare   @Month   int
None.gif    
declare   @Day   int
None.gif    
declare   @SerialNumber   int
None.gif    
None.gif    
select   @Year = year ( getdate ()), @Month = month ( getDate ()), @Day = day ( getdate ()), @SerialNumber = 0
None.gif    
None.gif    
if   not   exists select   1   from   [ Application.TableKey ]   where  TableName = @TableName  )
None.gif    
begin
None.gif        
INSERT   INTO   [ Application.TableKey ]
None.gif              (TableName,
Year Month , Day , SerialNumber)
None.gif        
VALUES  ( @TableName , @Year , @Month , @Day , @SerialNumber )
None.gif        
None.gif        
-- update [Application.TableKey] set TableID=@@Identity where TableName=@TableName
None.gif
     end
None.gif    
else
None.gif    
begin
None.gif        
select   @SerialNumber = isnull (SerialNumber, 0 from   [ Application.TableKey ]  
None.gif        
where  TableName = @TableName   and   year = @Year   and   month = @Month   and   Day = @Day         
None.gif    
end
None.gif    
None.gif    
select   @SerialNumber = @SerialNumber + 1
None.gif    
update   [ Application.TableKey ]   set  
None.gif    
year = @Year , month = @Month , day = @Day ,SerialNumber = @SerialNumber
None.gif    
where  TableName = @TableName
None.gif    
None.gif    
select   @NextID   =  ( @Year * POWER ( 10 , 4 +   @Month * POWER ( 10 , 2 +   @Day ) * power ( 10 , len ( @SerialNumber ))  +   @SerialNumber
None.gif

使用的表
ExpandedBlockStart.gif ContractedBlock.gif /**/ /****** 对象:  Table [dbo].[Application.TableKey]    脚本日期: 05/16/2006 22:57:59 ******/
None.gif
SET  ANSI_NULLS  ON
None.gif
GO
None.gif
SET  QUOTED_IDENTIFIER  ON
None.gif
GO
None.gif
CREATE   TABLE   [ dbo ] . [ Application.TableKey ] (
None.gif    
[ ID ]   [ int ]   IDENTITY ( 1 , 1 NOT   NULL ,
None.gif    
[ TableName ]   [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL ,
None.gif    
[ TableID ]   [ int ]   NULL ,
None.gif    
[ Year ]   [ int ]   NULL ,
None.gif    
[ Month ]   [ int ]   NULL ,
None.gif    
[ Day ]   [ int ]   NULL ,
None.gif    
[ SerialNumber ]   [ int ]   NULL
None.gif
ON   [ PRIMARY ]
None.gif

转载于:https://www.cnblogs.com/ofei/archive/2006/05/15/400914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值