存储过程:sql server根据规则生成主键

CREATE procEDURE  [dbo].[GetID] 
  -- Add the parameters for the stored procedure here
  @TableName varchar(64), 
  @TableID varchar(64) output
AS
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;
 
    DECLARE @s_Ident varchar(50),@d_Date DateTime, @s_Fill VARCHAR(1), @s_Type VARCHAR(3), @s_Date varchar(50),
  @s_Head VARCHAR(10),@s_ID varchar(50)
 
  --查询日期
  select @d_Date =pci_date from pb_code_ident Where pci_table = @TableName
  if(convert(nvarchar(50),@d_Date,111)=convert(nvarchar(50),Getdate(),111))--如果日期相等
  BEGIN
    --更新自增量
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    update pb_code_ident set pci_identity = pci_identity + 1 Where pci_table = @TableName
  END
  else
  BEGIN  
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    update pb_code_ident set pci_identity = pci_default,pci_date=convert(nvarchar(50),Getdate(),111) Where pci_table = @TableName
  END
 
  --获取最新自增量
  select @s_ID =pci_identity,@s_Head = pci_head from pb_code_ident Where pci_table = @TableName
  set @TableID = @s_Head + convert(varchar(8),getdate(),112) +@s_ID;
END
GO
CREATE TABLE [dbo].[pb_code_ident](
    [pci_table] [varchar](64) NOT NULL,
    [pci_type] [varchar](64) NULL,
    [pci_length] [int] NULL,
    [pci_head] [varchar](8) NULL,
    [pci_fill] [varchar](64) NULL,
    [pci_date] [datetime] NULL,
    [pci_default] [decimal](18, 0) NULL,
    [pci_identity] [decimal](16, 0) NULL,
 CONSTRAINT [PK_PB_Code_Ident] PRIMARY KEY CLUSTERED 
(
    [pci_table] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

 

posted @ 2021-08-20 10:16  MakeGod  阅读(116)  评论(0)    收藏  举报