下面将为您介绍通过程序获得SQL Server自增型字段的函数–GetKey函数的方法,供您参考,希望对你更好学习SQL中函数能够有所帮助。

概述:

通过程序来产生自增型字段,可以避免多用户操作的读取脏数据,操作也很简便.可以更好的在程序中控制这些关键字段的数值.

关键步骤:

1. 创建用于存放需要自增的数据表.(systemkey)

SQL Script 如下:

    ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[SystemKey]')andOBJECTPROPERTY(id,N'IsUserTable')=1) droptable[dbo].[SystemKey] GO CREATETABLE[dbo].[SystemKey]( [ID][int]NOTNULL, [KeyName][nvarchar](50)NOTNULL, [KeyValue][int]NOTNULL, [SourceID][nvarchar](50)NOTNULL, [LockTime][datetime]NULL )ON[PRIMARY] GO

KeyName:关键字的字段名(我们需要的字段名称,手工添加到这个表中)

KeyValue:对应字段名的值.

SourceID:字段的来源,如果没有可以填””

LockTime:锁定的时间,在程序内部使用.

2. GetKeys函数方程,通过调用GetKeys函数得到关键字的值.

函数描述如下:

    ImportsMicrosoft.ApplicationBlocks.Data ImportsMicrosoft.VisualBasic.CompilerServices ImportsSystem.Threading ImportsSystem.Data.SqlClient PublicClassClassTestClassClassTest PublicFunctionGetKeys()FunctionGetKeys(ByValKeyNameAsString,ByValSourceAsString,ByValCNStringAsString)AsInteger DimconnectionAsNewSqlConnection(CNString) DimNewNumAsInteger Dimobj2AsObject DimsFlageAsString="Flag" Try DimsqlAsString DimtimeAsDateTime=DateAndTime.Now.AddSeconds(1) connection.Open() DoWhile(StringType.StrCmp(sFlage,"",False)<>0) sql=(("Update[SystemKey]Set[SourceID]='"&Source&"',[LockTime]=GetDate()Where[KeyName]='"&KeyName)&"'AND((DATEADD(millisecond,1000,LockTime)<GetDate())OR(SourceID=''))") DimjAsInteger=SqlHelper.ExecuteNonQuery(connection,CommandType.Text,sql) If(j>0)Then sFlage="" ExitDo EndIf sFlage="Err" connection.Close() If(DateTime.Compare(time,DateAndTime.Now)<0)Then Return-1 EndIf Thread.Sleep(10) Loop sql="SelectKeyValueFrom[SystemKey]Where[KeyName]='"&KeyName&"'ANDSourceID='"&Source&"'" DimOldNumAsObject=SqlHelper.ExecuteScalar(connection,CommandType.Text,sql) DimnumAsInteger=(IntegerType.FromObject(OldNum)+1) sql="Update[SystemKey]Set[KeyValue]="&StringType.FromInteger(num)&",[SourceID]=''Where[KeyName]='"&KeyName&"'" SqlHelper.ExecuteNonQuery(connection,CommandType.Text,sql) NewNum=num CatchexceptionAsException NewNum=-1 Finally IfNotconnectionIsNothingThen CType(connection,IDisposable).Dispose() EndIf EndTry ReturnNewNum EndFunction EndClass

【编辑推荐】

SQL中DATENAME函数的用法

SQL中循环语句的效果实例

SQL中类似For循环处理的实例

对存储过程代替SQL语句的讨论

SQL聚合函数之Avg 函数