我正在尝试创建两个电子邮件地址列表,一个是当前登录到数据库的所有用户的列表,另一个是未登录的用户。
我似乎无法填充@usersin和@usersout变量,我从最后两个SELECT中得到一个NULL输出......任何人都可以关注我下面的代码并告诉我是什么错了吗?
SELECT @maxurn = MAX(ID) FROM ##tmp2
SET @urn = 1
WHILE @urn <= @maxurn
BEGIN
SET @usersin = @usersin + (SELECT [USER_NAME] + ';' FROM ##tmp2 WHERE [LoggedIn]='YES'
AND ID = @urn FOR XML PATH(''))
SELECT @urn = @urn + 1
END
SET @urn = 1
WHILE @urn <= @maxurn
BEGIN
SET @usersout = @usersout + (SELECT [USER_NAME] + ';' FROM ##tmp2 WHERE [LoggedIn]='NO'
AND ID = @urn FOR XML PATH(''))
SELECT @urn = @urn + 1
END
SELECT @usersin
SELECT @usersout
答案 0 :(得分:1)
看起来似乎是设计上的。如果将NULL与某个值连接起来,则结果为NULL:
SQL Server String Concatenation with Null
因此您尝试设置@usersin和@usersout失败,因为它们开始时为NULL。直接分配(不连接),或给它一个初始值(例如空字符串)。