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

求分析:关于新闻编号产生的问题?
请教一下各位:
我现在有一个新闻库newsDB.
其中库中有新闻表news,新闻分类表class,新闻与分类关联表newsclass.
因为newsDB考虑到需要P2P同步的问题,所以每张表中有site和ID字段(主键),这个ID 是自增的。
所以我重新在news表中建了一个NEWSid新闻编号字段与newsclass关联。
请问一下:怎么设置这个NEWSid不会重复?
因为有双向同步。所以怎么防止不重复。
请各位帮我分析分析。
或者我该如果设置这个新闻编号,在数据库双向同步的情况下。
数据库

------解决方案--------------------

if OBJECT_ID('GETAUTONO','P') is not null drop proc GETAUTONO
go
CREATE PROCEDURE [dbo].[GETAUTONO] 
@AID VARCHAR(20),
@AUTONO VARCHAR(30) OUTPUT
AS
BEGIN
DECLARE @ADATE VARCHAR(20),@ALENGTH INT,@ANEXTNO INT,@ALASTDATE VARCHAR(8)
SELECT @AUTONO=ISNULL(APREFIX,''),@ADATE=ADATE,@ALENGTH=ALENGTH,@ANEXTNO=ANEXTNO,@ALASTDATE=ALASTDATE
FROM SMAUTO_1 WHERE AID=@AID
--GET DATEPART
DECLARE @DATEPART VARCHAR(10)
SET @DATEPART=CONVERT(VARCHAR(10),GETDATE(),120)
SET @DATEPART=CASE @ADATE
WHEN 'YYMM' THEN SUBSTRING(@DATEPART,3,2)+SUBSTRING(@DATEPART,6,2)
WHEN 'YYYYMM' THEN SUBSTRING(@DATEPART,1,4)+SUBSTRING(@DATEPART,6,2)
WHEN 'YY' THEN SUBSTRING(@DATEPART,3,2)
WHEN 'YYYY' THEN SUBSTRING(@DATEPART,1,4)
WHEN 'YYMMDD' THEN SUBSTRING(@DATEPART,3,2)+SUBSTRING(@DATEPART,6,2)+RIGHT(@DATEPART,2)
WHEN 'YYYYMMDD' THEN SUBSTRING(@DATEPART,1,4)+SUBSTRING(@DATEPART,6,2)+RIGHT(@DATEPART,2)
  ELSE ''
END
SET @AUTONO=@AUTONO+@DATEPART
--get next no
DECLARE @NEXTNO VARCHAR(30)
IF (@DATEPART='' OR @DATEPART=@ALASTDATE)
BEGIN
SET @NEXTNO=CONVERT(VARCHAR(30),@ANEXTNO)
SET @NEXTNO=REPLICATE('0',@ALENGTH-LEN(@NEXTNO))+@NEXTNO
UPDATE SMAUTO_1 SET ANEXTNO=ANEXTNO+1 WHERE AID=@AID
END
ELSE
BEGIN
SET @NEXTNO=REPLICATE('0',@ALENGTH-1)+'1'
UPDATE SMAUTO_1 SET ANEXTNO=2,ALASTDATE=@DATEPART WHERE AID=@AID 
END
SET @AUTONO=@AUTONO+@NEXTNO
END
go
--调用存储过程得到自动编号值
declare @v_output varchar(64)
exec [GETAUTONO] 'BONUSSEQ' , @v_output output 
select @v_output
/*
--以下是创建表语句
CREATE TABLE [dbo].[SMAUTO_1](
[AID] [varchar](50) not NULL unique, --自动编号唯一编码
[ADESC] [varchar](50) NULL, --编号描述EN
[ADESCCHS] [varchar](50) NULL, --编号描述CH
[APREFIX] [varchar](50) NULL, --前缀
[ADATE] [varchar](50) NULL, --时间格式
[ALENGTH] [int] NULL, --流水号长度
[ANEXTNO] [int] NULL, --下一编号
[ALASTDATE] [varchar](50) NULL, --***
[VGUID] [uniqueidentifier] NOT NULL, --主键
[VCRTTIME] [datetime] NULL, --创建日期
[VCRTUSER] [varchar](50) NULL, --创建人
[VMDTIME] [datetime] NULL, --修改时间
[VMDUSER] [varchar](50) NULL, --修改人
[VSTATUS] [varchar](50) NULL, --状态
[VLOCK] [varchar](50) NULL, --是否锁定
[VLOCKTIME] [