Sql server SQL在存在时被卡在循环中?

Sql server SQL在存在时被卡在循环中?,sql-server,while-loop,Sql Server,While Loop,我有一个游标,它基本上是在表中插入新用户名。我试图检查现有的,并附加一个“_1”或“_2”等 然而,我的代码似乎陷入了一个循环,永远不会结束 以下是我认为有问题的代码: SET @NUM = 1 --If Username already exists append number While Exists ( select Null from CUSTOMTABLE Where USER_PRINCIPAL_NAME = @UPN)

我有一个游标,它基本上是在表中插入新用户名。我试图检查现有的,并附加一个“_1”或“_2”等

然而,我的代码似乎陷入了一个循环,永远不会结束

以下是我认为有问题的代码:

        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'插入表中。我在正确存在时没有这样做吗?

这应该绝对有效。您没有考虑NULL,而且还重复添加#,因此您的字符串将开始看起来像x#,x#,x##,等等


这看起来像是一个单一的声明。为什么在使用
时使用
?只要使用
如果存在
我希望它循环并不断增加直到upn不存在在开始循环之前@upn的值是多少?我猜它是空的。将NULL与另一个字符串关联将返回NULL。因此,这可能会陷入无限循环,具体取决于空ansi设置。它可能会有所不同。。。但它将表示类似于FirstInitial+LastName的内容,因此例如,它将是“JSmith”。。。如果“JSmith”存在,那么应该在您的集合中将其更改为“JSmith_1”,将@UPN替换为ISNULL(@UPN'),并让我们知道这是否解决了问题,它是我在@UPN变量上使用的数据类型。集合从未实际更改UPN的值。。。。。
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