您的位置:首页 > 其它

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

2006-05-15 23:00 381 查看
由于搜索引擎越来越强大,甚至于如果你的网页没有被搜索引擎搜索到,那么你的网页将深深的埋在80多亿的网页之下!
因此,越来越多的网页都执行了URL重写,以达到URL友好,搜索引擎友好!所以构建一个用户友好的主键ID利于url重写时进行更好的分析!
以下是我提供的一个sql存储过程,可以按年月日生成用户友好的主键ID。欢迎指点!

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Application.spGetNextID')
BEGIN
DROP Procedure [Application.spGetNextID]
END

GO

CREATE Procedure [Application.spGetNextID]
@TableName nvarchar(50),
@NextID bigint=null output
AS
set nocount on

declare @Year int
declare @Month int
declare @Day int
declare @SerialNumber int

select @Year=year(getdate()),@Month=month(getDate()),@Day=day(getdate()),@SerialNumber=0

if not exists( select 1 from [Application.TableKey] where TableName=@TableName )
begin
INSERT INTO [Application.TableKey]
(TableName,Year, Month,Day, SerialNumber)
VALUES (@TableName,@Year,@Month,@Day,@SerialNumber)

--update [Application.TableKey] set TableID=@@Identity where TableName=@TableName
end
else
begin
select @SerialNumber=isnull(SerialNumber,0) from [Application.TableKey]
where TableName=@TableName and year=@Year and month=@Month and Day=@Day
end

select @SerialNumber=@SerialNumber+1
update [Application.TableKey] set
year=@Year,month=@Month,day=@Day,SerialNumber=@SerialNumber
where TableName=@TableName

select @NextID = (@Year*POWER(10,4) + @Month*POWER(10,2) + @Day)*power(10,len(@SerialNumber)) + @SerialNumber

使用的表

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Application.TableKey](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TableName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[TableID] [int] NULL,
[Year] [int] NULL,
[Month] [int] NULL,
[Day] [int] NULL,
[SerialNumber] [int] NULL
) ON [PRIMARY]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: