创建用户友好的数据表主键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]
因此,越来越多的网页都执行了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]
相关文章推荐
- SQL创建数据库中所有用户数据表自增一主键
- SQL创建数据库中所有用户数据表自增一主键
- mysql自增主键返回---创建成功后返回用户的ID
- SQL创建数据库中所有用户数据表自增一主键
- oracle 表空间、临时表空间、创建用户、导入数据、导出数据
- 如果数据表中‘Id’为主键,如何利用数据库自带工具导入数据呢
- oracle数据库用户创建删除以及数据导入
- SQLITE数据表主键设置Id自增方法
- 第4章 处理用户输入与显示数据------------(禁止命令输出、lsof命令、关闭文件描述符、创建读取/写入文件描述符)
- MyBatis插入数据 返回插入的主键ID
- mysql 批处理文件--- 创建 用户 以及 导入数据
- Oracle 命令行创建表空间、用户,授予表空间、授予dba权限,导入/导出dmp数据文件
- Java获取数据库自增主键表中插入数据的ID
- PL/SQL 之创建用户及数据导入导出
- oracle数据库部分基本操作(表数据恢复,创建用户并加权限,数据导入导出)
- 常用sql命令@oracle数据类型概括@权限、角色、用户的创建于使用@伪列及其注意事项
- mysql -创建 用户 和 数据库
- Oracle10g数据库用户创建及数据导入导出操作
- 创建用户、表空间、分配权限以及导入导出数据
- MySql之DDL操作创建表(添加主键, 外键约束以及基本的数据类型)