ich dieses alghorithm ein schreiben und es ist richtig: Tische waren:Wie eine benutzerdefinierte alphanumerischen Primärschlüssel in SQL Server 2005 erstellen
create table PrimKeyTest (primarykeycolumn varchar(8), nextcolumn int)
GO
insert into PrimKeyTest values ('P09-0001', 1)
GO
und Meine Funktion ist:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[GetSpecialPrimaryKey](@yearvalue int)
returns nvarchar(8)
as
begin
declare @maxkey varchar(4)
declare @maxLength int, @maxkeylength int
set @maxLength = 4
select @maxkey = ISNULL(cast(max(cast(substring(primaryKeycolumn, 5, 4) as integer)+1) as varchar),'1')
from PrimKeyTest
where substring(primaryKeycolumn, 2, 2) = substring(convert(varchar, @yearvalue), 3, 2)
set @maxkeylength = len(@maxkey)
while @maxkeylength < @maxLength
begin
set @maxkey = '0' + @maxkey
set @maxkeylength = len(@maxkey)
end
return 'P' + substring(convert(varchar, @yearvalue), 3, 2) + '-' + @maxkey
end
Wenn ich jetzt die letzte Zeile dieser Tabelle lösche, gibt der neue letzte Eintrag die richtige Nummer, z. P09-0001 P09-0002 P09-0003 P09-0004 P09-0005 aber wenn ich die zweite Zeile dieser Tabelle lösche, hat die Reihenfolge der primären Spalte inkorrekt z. P09-0001 P09-0003 P09-0004 P09-0005 Können Sie mir helfen? Ich will das: P09-0001 P09-0002 P09-0003 P09-0004
+1 Vielleicht möchte er nicht die Primärschlüssel neu anordnen, sondern nur gelöschte Schlüssel wiederverwenden. Aber das klingt auch nicht nach einer guten Idee. –
Wow, es geht. VIELEN DANK . << Paul Sasik SIE SIND DIE BESTEN >> – hamed