在sql server 2012中生成唯一的字符串

时间:2013-04-25 10:28:18

标签: sql sql-server-2012

我有一张桌子

CREATE TABLE #Agency 
 (
  AgencyID int PRimary KEY IDENTITY(1,1),
  AgencyName varchar(100), 
  AgencyCode varchar(50)
  )

我想在插入表格时生成一个独特的代理商代码...代理商代码应该只包含字母..没有数字或特殊字符

谢谢

2 个答案:

答案 0 :(得分:3)

您可以做一些简单的事情,例如将您的ID转换为varchar并用字母(或组合)替换每个数字。

1 = A,2 = B等。

因此,只要您的ID是唯一的,代码就是唯一的。

Snippet可能是这样的:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    CAST(AgencyID AS VARCHAR(50))
    ,'1','A'),'2','B'),'3','C'),'4','D'),'5','E'),'6','F'),'7','G'),'8','H'),'9','I'),'0','J')

如果要在插入期间执行此操作,可以使用IDENT_CURRENT('tablename')来获取为标识列插入的值。

      INSERT INTO Agency (AgencyName, AgencyCode)
    SELECT 'Name001', 
              REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
              CAST(IDENT_CURRENT('Agency') AS VARCHAR(50))
              ,'1','A'),'2','B'),'3','C'),'4','D'),'5','E'),'6','F'),'7','G'),'8','H'),'9','I'),'0','J')

;

<强> SQLFiddle DEMO

创建一个将数字转换为字符串和/或计算列的函数可能更适合使用。

<强> DEMO using function and computed columns

编辑:

<强> DEMO with updated request to make at least 5 string long character

答案 1 :(得分:1)

我建议您在应用程序中生成字符串。这样,您可以使用比T-SQL更适合过程代码的语言。无论如何,最好的做法是尽可能地将逻辑排除在SQL Server之外。