我正在尝试将UPDATE
用户名添加到我们的数据库中,但我遇到了UQ的问题。
在我们的架构中,我们在同一个表中有公司管理员用户和联系人。每个公司都有1个管理员用户,其中包括从他们的名字中取6个字符并添加运行编号(如果有6个字符重复)。
例如:
公司名称:测试公司
用户名: testco-1
使用admin用户(具有相同的6个字符开头)的运行编号从1到15(ish)不等。
我们的联系人表格列CorporateAdminId
与管理员用户设置为NULL,但联系人会使用此字段转介给管理员用户。因此表格与自身有关系。
注意:联系人之前没有用户名 因为软件升级我们的联系人也需要有用户名。联系人的用户名使用相同的规则(6个字符+运行编号)创建,前6个字符由AdminUserId参考(不是联系人自己的公司名称)定义
例如:
AdminUserId: GUID (指测试公司)
公司名称:数据挖掘者
用户名: testco-2
我的问题是,在 使用'testco' 启动fe时,如何计算数据库中有多少用户名,并将此数字添加到用于创建联系人用户名的运行号码(因此不会与UQ发生冲突)
编辑:更新中使用的当前查询
SELECT LEFT(LOWER(REPLACE(A.CorporateName, ' ','')), 10)+'-
'+CAST(COUNT(*) OVER(PARTITION BY
SUBSTRING(A.Username,1,CHARINDEX('0',A.Username)))+(ROW_NUMBER()
OVER(PARTITION BY B.AdminUserId ORDER BY
LEFT(LOWER(REPLACE(A.CompanyName, ' ','')),10))) as nvarchar(255)) FROM
Contact B INNER JOIN Contact A ON a.Id = B.AdminUserId
问题在于它增加了要更新的行数,而不是db中用户名为'xxxxxx'的行。
答案 0 :(得分:1)
select username, left(username, 6)
, row_number() (partition by left(username, 6) order by username) rn
from table