我试图在我们的数据库中使用UPDATE用户名,但是我对UQ有问题。
在我们的模式中,我们在同一个表中有公司管理用户和联系人。每个公司都有一个管理员用户,通过从他们的名字中提取6个字符并添加运行号(如果有6个字符重复的话)。
例如:
CompanyName:测试公司
UserName:testco-1
使用admin用户运行的数字(具有相同的6个字符开始)从1到15不等(Ish)。
我们的联系人表有列CorporateAdminId,与Admin用户一起设置为NULL,但联系人使用此字段引用admin用户。所以这张桌子和它自己有关系。
注意:在联系人没有用户名之前,由于软件升级,我们的联系人也需要用户名。联系人的用户名是用相同的规则(6个char+running号)创建的,前6个字符由AdminUserId引用(而不是联系人自己的公司名称)定义。
例如,:
AdminUserId:GUID (指测试公司)
CompanyName:数据矿工
UserName:testco-2
我在这里的问题是,当用'testco'启动f.e时,如何计算数据库中有多少个用户名,并将这个数字添加到我用来创建联系人用户名的运行号中(这样就不会出现与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‘的行数。
发布于 2015-06-29 11:48:59
select username, left(username, 6)
, row_number() (partition by left(username, 6) order by username) rn
from table https://stackoverflow.com/questions/31114520
复制相似问题