2016-10-19 4 views
0

私はリストを与えられました。ユーザーと私はユーザーのユーザー名を作成する必要がありますが、特定のビジネスルールに従わなければなりません。ユーザー名=最初の3文字+姓の最初の3文字です。ユーザー名が存在する場合は、1の後に数値を追加します。Count()関数を使用して重複したUserNameを変更する、SQL 2012

Ex。 3つのChirs Henzがある場合、ユーザー名はChiHen、ChiHen1、ChiHen2でなければなりません。

IF(NOT EXISTS(SELECT UserName FROM SystemUser WHERE SystemUser.UserName = UserName)) 
    UPDATE U 
    SET UserName = UserName + CAST((SELECT COUNT(1) FROM SystemUser WHERE UserName LIKE UserName+'%') AS NVARCHAR),  

@UserUploadは、データを保持するためのユーザー定義のテーブルです。私は最後に正しい番号を追加しなければならないChiHenの数をカウントするためにCount()を使用しています。これを実行すると、これが私の結果です。 CHIHEN、CHIHEN、CHIHEN3

答えて

0

別のオプションは、アドホック集計テーブルに

Declare @Users table (ID int,UserName varchar(25),FullName varchar(50)) 
Insert into @Users values 
(1,'TESUSE','Test User'), 
(2,'TESUSE1','Test User'), 
(3,'TESUSE3','Test User') --<<< Notice that Test User 2 is missing 

Declare @NewFirst varchar(50)='Test' 
Declare @NewLast varchar(50)='User' 

Select Top 1 * 
From (
     Select RowNr,NewUserName=Upper(Concat(Left(@NewFirst,3),Left(@NewLast,3), IIF(RowNr-1=0,NULL,RowNr-1))) 
     From (
       Select RowNr=Row_Number() over (Order By (Select NULL)) 
       From (Select N From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)) N1, 
         (Select N From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)) N2 
      ) N 
    ) A 
    Where NewUserName Not in (Select UserName From @Users) 
    Order By RowNr 

戻り

RowNr NewUserName 
3  TESUSE2 
を使用することです
関連する問題