在UPDATE

时间:2015-06-29 11:29:00

标签: sql-server tsql

我正在尝试将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'的行。

1 个答案:

答案 0 :(得分:1)

select username, left(username, 6)
     , row_number() (partition by left(username, 6) order by username) rn 
  from table