2017-02-24 70 views
0

我有一個光標,基本上是在一個表中插入新的用戶名。我想檢查現有的和追加「_1」或「_2」等雖然存在SQL陷入循環?

但是它看起來好像我的代碼被陷在一個循環,並永遠不會完成。

這裏是有問題的代碼,我相信:

 SET @NUM = 1 

     --If Username already exists append number 
     While Exists (select Null from CUSTOMTABLE Where USER_PRINCIPAL_NAME = @UPN) 

     BEGIN 
      SET @UPN = @UPN+'_'+RTRIM(CONVERT(varchar(10), @NUM)) 
      SET @NUM = @NUM+1 
     END 

我接下來要值「@upn」插入表中。我是否在正確存在的情況下這樣做?

+0

那看起來像一個單一的聲明。你爲什麼使用'While'?只要使用'如果Exists' –

+0

我希望它循環和不斷增加,直到UPN不存在 – MogulBomb

+0

什麼是@UPN的開始循環之前的價值?我的猜測是它是NULL。將NULL與另一個字符串聯繫在一起會返回NULL。所以這可能會陷入一個無限循環,取決於空的ansi設置。 – UnhandledExcepSean

回答

0

這絕對應該工作。你不採取NULL考慮,你還反覆添加#,所以你的字符串將開始尋找像X#,#X_#,X#等

SET @NUM = 1 
SET @UPN=ISNULL(@UPN,'') 

DECLARE @OrgUPN NVARCHAR(2000) 
SET @OrgUPN = @UPN 

     --If Username already exists append number 
     While Exists (select Null from CUSTOMTABLE Where USER_PRINCIPAL_NAME = @UPN) 

     BEGIN 
      SET @UPN = @OrgUPN+'_'+RTRIM(CONVERT(varchar(10), @NUM)) 
      SET @NUM = @NUM+1 
     END 
+0

,它仍然似乎被卡住...... – MogulBomb

+0

這竟然是我使用的@UPN數據類型變量。該套裝從未真正改變UPN的價值..... – MogulBomb