将声明的变量设置为2个串联的列

时间:2019-02-08 18:47:49

标签: sql sql-server variables concatenation

我正在尝试将一个表(ApplicationUsers是表中的两列中的值组合在一起,列是UserFirstNameUserLastName)到一个名为{{1} }。我似乎什么都没做,我的目标是将此新变量插入另一个表中。我尝试了多种方法,但这是最失败的方法(失败)

UserName

我一直在 DECLARE @UserFirstName nvarchar(250) DECLARE @UserLastName nvarchar(250) DECLARE @UserName nvarchar(250) DECLARE @Role nvarchar = Null DECLARE @AppUserName nvarchar(250) = 'jbrown' SELECT AppUserName, (CAST(UserFirstName as Nvarchar(250)) + ' ' + CAST(UserLastName as Nvarchar(250))) AS @UserName FROM ApplicationUsers WHERE @AppUserName = AppUserName Invalid column上收到UserFirstName。我也尝试过,但是基本上什么也没选择。我在这里做错了什么?我的目标是拥有UserLastName

@UserName = 'John Brown'

注意:如果我仅使用以下内容,它将从表中选择正确的行/记录-

 SELECT AppUserName, UserFirstName, UserLastName
 FROM ApplicationUsers
 WHERE @AppUserName = AppUserName
 AND @UserFirstName = UserFirstName
 AND @UserLastName = UserLastName
 AND @UserName = UserFirstName + ' ' + UserLastName
 Print @UserName

1 个答案:

答案 0 :(得分:1)

我改用CONCAT()

SELECT @UserName = CONCAT(UserFirstName, ' ', UserLastName)  
FROM ApplicationUsers
WHERE AppUserName = @AppUserName;

如果其中一个(即UserFirstNameUserLastName)的值为null,则整个字段将为null。因此,CONCAT()null的值隐式转换为空字符串。

如果不支持CONCAT(),请改用ISNULL()并进行串联:

SELECT @UserName = ISNULL(UserFirstName, '') + ' ' + ISNULL(UserLastName, '')  
FROM ApplicationUsers
WHERE AppUserName = @AppUserName;

这假设AppUserName如果没有多余的行,则使用DISTINCTTOP (1)子句。