;WITH SampleData AS ( SELECT ID, InsertDateDT = CAST(InsertDate AS DATETIME) FROM (VALUES (1,'20120828'), (2,'20120828'), (3,'20120829'),(4,'20120829')) d (ID, InsertDate))SELECT ID, InsertDateDT, MyBigintCompositeID = CAST( CONVERT(VARCHAR(8),InsertDateDT,112) + RIGHT('00000'+CAST(ROW_NUMBER() OVER(PARTITION BY InsertDateDT ORDER BY ID) AS VARCHAR(5)),5) AS BIGINT)FROM SampleData
--------------------------------------------------------------drop table #test;create table #test ( id varchar(13) );--------------------------------------------------------------declare @id varchar(13), @nextid varchar(13);select @id = max(id) from #test;select @nextid = case when left(@id, 8) = convert(varchar(8), getdate(), 112) then convert(varchar(8), getdate(), 112) + right('0000' + cast(cast(substring(@id, 9, 5) as int) +1 as varchar(5)),5) else convert(varchar(8), getdate(), 112) + '00001' end;insert into #test values ( @nextid );--------------------------------------------------------------select * from #test;--------------------------------------------------------------
CREATE TABLE #t (ID BIGINT IDENTITY(201208280001, 1), value INT)INSERT INTO #t SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3IF LEFT(IDENT_CURRENT('#t'), 8) <> CONVERT(VARCHAR(8), GETDATE(), 112)BEGIN DECLARE @newseed BIGINT = CAST(CONVERT(VARCHAR(8), GETDATE(), 112)+'0000' AS BIGINT) DBCC CHECKIDENT('#t', RESEED, @newseed)ENDINSERT INTO #t SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6SELECT * FROM #tDROP TABLE #t