我寫這篇文章alghorithm和它是正確的: 表爲:如何創建SQL Server中的自定義字母數字的主鍵2005
create table PrimKeyTest (primarykeycolumn varchar(8), nextcolumn int)
GO
insert into PrimKeyTest values ('P09-0001', 1)
GO
和我的作用是:
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
現在,當我刪除該表的最後一行時,新的最後一條記錄給出正確的編號,例如。 P09-0001 P09-0002 P09-0003 P09-0004 P09-0005 但是當我刪除此表的第二行主列的順序有不正確的 例如。 P09-0001 P09-0003 P09-0004 P09-0005 你能幫我嗎? 我想要這個:P09-0001 P09-0002 P09-0003 P09-0004
+1也許他不想重新排序主鍵,而只是重用已刪除的鍵。但是這聽起來不是一個好主意。 – 2010-12-18 18:04:39
哇!非常感謝你 。 <<保羅薩西克你是最棒的>> – hamed 2010-12-19 04:04:42