我有一张桌子
CREATE TABLE #Agency
(
AgencyID int PRimary KEY IDENTITY(1,1),
AgencyName varchar(100),
AgencyCode varchar(50)
)
我想在插入表格时生成一个独特的代理商代码...代理商代码应该只包含字母..没有数字或特殊字符
谢谢
答案 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之外。