如何以特定格式创建唯一的序列号字符串



我想用一些序列号填充我的SQL Server表,以便提供给其他人。它们实际上只是与人们的电子邮件地址相关的UUID。

我可以看到 ColdFusion 提供了CreateUUID函数,但它生成的 ID 格式为:

xxxxx-xx-xx

这是遵循 8-4-4-16 结构。我只想要一些简单的东西,例如 3-3-3 格式,该格式对于表中的每一行(即每个客户)都是唯一的。

解决这个问题的最佳方法是什么?我不介意在SQL或ColdFusion中执行此操作,但是我不确定如何让它们中的任何一个为我自动生成这样的字符串。SQL Server具有NEWID()功能,但它再次生成不是我想要的格式的大字符串。

有没有办法强制SQL的NewID()或CF的CreateUUID创建一个具有3-3-3格式的唯一序列?

序列号应该是唯一的。保证电子邮件地址的唯一序列号的一种方法是设置"身份"列的格式。如果电子邮件表还没有"标识"列,请添加一个。假设它被命名为 Email_ID,那么下面的表达式将为您提供一个 XXX-XXX-XXX 形式的字符串,该字符串保证对电子邮件表是唯一的。

SELECT
  STUFF(STUFF(RIGHT('000000000' + CAST(Email_ID AS VARCHAR(9)), 9), 4, 0, '-'), 8, 0, '-')
FROM
  EmailTable

您可以使用这样的东西,它将生成您正在寻找的格式:

DECLARE @Value VARCHAR(100)
SELECT @Value = NEWID()
SELECT @Value
SELECT SUBSTRING(@Value,1,3) + '-' + SUBSTRING(@Value,10,3) + '-' + SUBSTRING(@Value,30,3)

您可以创建一个随机的 9 个字符的字符串,然后检查它在您的客户/人员表中是否唯一。如果不是 ->创建一个新的随机字符串并再次检查。(循环直到它是唯一的)。

我为此创建了 2 个函数,一个生成 9 个字符的随机字符串,另一个使用第一个函数创建一个字符串,然后检查表以查看该字符串是否存在于特定列中。

随机字符串函数:

<cffunction name="makeRandomString" returnType="string" output="false">
    <cfargument name="codeLength" type="numeric" required="no" default="9">
   <cfset var chars = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZ">
   <cfset var length = codeLength>
   <cfset var result = "">
   <cfset var i = "">
   <cfset var char = "">
   <cfscript>
   for(i=1; i <= length; i++) {
      char = mid(chars, randRange(1, len(chars)),1);
      result&=char;
   }
   </cfscript>
   <cfreturn result>
</cffunction>

创建随机字符串并确保它在特定表的特定列中唯一的函数:

<cffunction name="createUniqueCode" returnType="string" output="false">
    <cfargument name="tableName" type="string" required="yes">
    <cfargument name="columnName" type="string" required="yes">
    <cfargument name="codeLength" type="numeric" required="no" default="9">
    <cfset ordercode = 0>
    <cfset ordercodecheck = 0>
    <cfloop condition="ordercodecheck eq 0">
        <cfset ordercode = #makeRandomString('#codeLength#')#>
        <cfquery name="findCode" datasource="#application.datasource#">
        select #kolomNaam# from #tableName# where #columnName# = '#ordercode#'
        </cfquery>
        <cfif findCode.recordcount eq 0>
            <cfset ordercodecheck = 1>
        </cfif>
    </cfloop>
    <cfreturn ordercode>
</cffunction>

现在,您可以循环 x 次并生成始终唯一的 x 个随机代码。(以下示例中的"myColumnName"是包含唯一代码的列的名称)

<cfloop from="1" to="100" index="i">
    <cfset newCode = createUniqueCode(tableName='myTableName',columnName='myColumnName')>
    <!--- insert what to do with new code here (f.e. an insert query) the "newCode" variable holds the new unique code. --->
</cfloop>

我希望这对你有任何帮助。

干杯

相关内容

  • 没有找到相关文章

最新更新