????????????????????
??????????????????λ?????????鷳????????????????????????????Σ???????????????????????????????????????????????洢?????????????????????????????????????????????IntKey????????????Σ?KeyName???KeyValue???????HashTable???????KeyName?????????????KeyValue????????????????????????????SQLServer?п????д????????洢??????????????????????С????????£?
????CREATEPROCEDURE[GetKey]
????@KeyNamechar(10)??
????@KeyValueintOUTPUT
????AS
????UPDATEIntKeySET@KeyValue=KeyValue=KeyValue+1WHEREKeyName=@KeyName
????GO
?????????????????洢??????????????????????????????????????OrderID???????????????????Σ??????????????????????????????????洢???????????OrderID???????????OrderID???Order????OrderDetail??????????????????????и????
?????????????????????????????????????????????????????????????????в????????????????????????????????????????????????????????????????????λ??????????RoundTrip???????????????????????????????????????????????????????????????????????????????????????繃??????????????????к???????????????????????????????????????????????????????????????
???????????UniqueIdentifier
????SQLServer?????????UniqueIdentifier?????????????????????????NEWID()?????NEWID()?????????????UniqueIdentifier??UniqueIdentifier????????????16????????????????????С????????????????0????????????????п???????
????{45F0EB02-0727-4F2E-AAB5-E8AEDEE0CEC5}
???????????????????UniqueIdentifier??Windows????????COM????????????????????????????.NET???UniqueIdentifier????GUID??GlobalUniqueIdentifier??????C#?п?????????????????????GUID??
????Guidu=System.Guid.NewGuid();
????????????????Order??OrderDetail???????????UniqueIdentifier??????????????????????????????????????????RoundTrip????????????????????GUID????????????????????????????
????UniqueIdentifier???????????????????????????????16????????????4???????????????洢??????????????UniqueIdentifier????????????????????????潨?????????????????????????????????????????????????????????????????飬????????????????????UniqueIdentifier??????????????????Integer???????????????????Ч??????????????????UniqueIdentifier???????????????????
??????????“COMB??Combine??”????
????????????????????????????????????????????????????к???????????????????????????COMB???????????????COMB?????????JimmyNilsson??????“TheCostofGUIDsasPrimaryKeys”???????????????????????????????????????????
????COMB????????????????·????????????UniqueIdentifier??????????????????????Ч????£??????????????????????????????????????????UniqueIdentifier???10???????ú?6???????GUID????????DateTime?????????????????????UniqueIdentifier??????????????UniqueIdentifier????????????????????????????????Ч?????????????UniqueIdentifier?????10????????????????????????????????6??????侫??????1/300??????COMB???????????????????????????1/300?????????????GUID?10????????????????????????????SQLServer????SQL????????·???????????
????DECLARE@aGuidUNIQUEIDENTIFIER
????SET@aGuid=CAST(CAST(NEWID()ASBINARY(10))
????+CAST(GETDATE()ASBINARY(6))ASUNIQUEIDENTIFIER)
????????????????COMB???????????INT???????????????????????????????????????????????Unidentifier??????????Щ????????????????ο???2004??7??21???????
???????????洢???????COMB??????????????????C#????COMB????????????????????????????????????ɡ?C#???????£?
///<summary>
///????GUID??????????????????????????????????Ч??
///</summary>
///<returns>COMB(GUID?????????)????GUID????</returns>
publicstaticGuidNewComb()
{
byte[]guidArray=System.Guid.NewGuid().ToByteArray();
DateTimebaseDate=newDateTime(1900??1??1);
DateTimenow=DateTime.Now;
//Getthedaysandmillisecondswhichwillbeusedtobuildthebytestring
TimeSpandays=newTimeSpan(now.Ticks-baseDate.Ticks);
TimeSpanmsecs=newTimeSpan(now.Ticks-(newDateTime(now.Year??now.Month??now.Day).Ticks));
//Converttoabytearray
//NotethatSQLServerisaccurateto1/300thofamillisecondsowedivideby3.333333
byte[]daysArray=BitConverter.GetBytes(days.Days);
byte[]msecsArray=BitConverter.GetBytes((long)(msecs.TotalMilliseconds/3.333333));
//ReversethebytestomatchSQLServersordering
Array.Reverse(daysArray);
Array.Reverse(msecsArray);
//Copythebytesintotheguid
Array.Copy(daysArray??daysArray.Length-2??guidArray??guidArray.Length-6??2);
Array.Copy(msecsArray??msecsArray.Length-4??guidArray??guidArray.Length-4??4);
returnnewSystem.Guid(guidArray);
}
///<summary>
///??SQLSERVER?????GUID????????????
///</summary>
///<paramname="guid">????????????COMB</param>
///<returns>???</returns>
publicstaticDateTimeGetDateFromComb(System.Guidguid)
{
DateTimebaseDate=newDateTime(1900??1??1);
byte[]daysArray=newbyte[4];
byte[]msecsArray=newbyte[4];
byte[]guidArray=guid.ToByteArray();
//Copythedatepartsoftheguidtotherespectivebytearrays.
Array.Copy(guidArray??guidArray.Length-6??daysArray??2??2);
Array.Copy(guidArray??guidArray.Length-4??msecsArray??0??4);
//Reversethearraystoputthemintotheappropriateorder
Array.Reverse(daysArray);
Array.Reverse(msecsArray);
//Convertthebytestoints
intdays=BitConverter.ToInt32(daysArray??0);
intmsecs=BitConverter.ToInt32(msecsArray??0);
DateTimedate=baseDate.AddDays(days);
date=date.AddMilliseconds(msecs*3.333333);
returndate;
}
????????
??????????????????????????????λ?????????????????????????Ч?????á????????????????????????????????????????????????????????????????????