连接SQL查询和NULL列的结果

时间:2010-05-11 14:54:10

标签: asp.net sql sql-server drop-down-menu

我需要将表的几列连接成一个值,然后在asp下拉列表中显示该值。我发出的SQL代码如下:

SELECT UserID,CustomerNum,UserName +' - '+ UserAddress +','+ UserCity +''+ UserState AS UserInfo 来自用户 WHERE(CustomerNum = @CustomerNum) 按用户名排序

然后我将'UserInfo'设置为下拉列表中的文本字段。

这通常有效,除了偶尔数据库中的一列是null(例如,UserState)。当发生这种情况时,整个串联为空,我在下拉列表中得到一个空条目。

SQLServer中是否存在允许我忽略这些NULL结果的内容,或者我是否必须在DataBind事件中编写代码?

由于

6 个答案:

答案 0 :(得分:3)

围绕它合并

COALESCE(UserName,'') + ' - ' + 
COALESCE(UserAddress,'') + ',' + 
COALESCE(UserCity,'') + ' ' + 
COALESCE(UserState,'') AS UserInfo

答案 1 :(得分:2)

对于SQL Server,您有三种选择:

  1. IsNull - 这是最古老,最兼容的方法,虽然它在SQL Server Compact Edition中不存在(不知道是否相关)。它需要两个参数并返回两个中的第一个非null,如果两者都是null,则返回null。
  2. 合并 - 这是新版本,也是新开发的首选。与IsNull类似,但可以使用两个以上的参数。与IsNull类似,它将返回第一个非null参数,如果全部都是null,则返回null。
  3. CONCAT_NULL_YIELDS_NULL - 这是一个数据库选项,可以设置为ONOFF。意思应该是自我解释,但这里是MSDN link

答案 2 :(得分:1)

对于可空列,可以这样做。

ISNULL(UserState, '')

答案 3 :(得分:1)

使用NULL连接有利于您,这将删除不必要的分隔符:

SELECT 
    UserID, CustomerNum
        ,ISNULL(UserName+' - ','')
             +ISNULL(UserAddress+', ','')
             +ISNULL(UserCity+' ','')
             +ISNULL(UserState,'') AS UserInfo 
    FROM Users 
    WHERE CustomerNum = @CustomerNum 
    ORDER BY UserName

工作示例:

DECLARE @Users table (userID int, CustomerNum int,UserName varchar(20), UserAddress varchar(20),  UserCity varchar(20), UserState varchar(20))
INSERT @Users VALUES (1,111,'Sam','123 First St.', 'city name', 'state name')
INSERT @Users VALUES (2,111,null,'123 First St.', 'city name', 'state name')
INSERT @Users VALUES (3,111,'Sam',null, 'city name', 'state name')
INSERT @Users VALUES (4,111,'Sam','123 First St.', null, 'state name')
INSERT @Users VALUES (5,111,'Sam','123 First St.', 'city name', null)
INSERT @Users VALUES (6,111,null,null, 'city name', 'state name')

SELECT 
    UserID, CustomerNum
        ,ISNULL(UserName+' - ','')
             +ISNULL(UserAddress+', ','')
             +ISNULL(UserCity+' ','')
             +ISNULL(UserState,'') AS UserInfo 
    FROM @Users 
    --WHERE CustomerNum = @CustomerNum 
    ORDER BY userID

输出:

UserID      CustomerNum UserInfo
----------- ----------- -------------------------------------------
1           111         Sam - 123 First St., city name state name
2           111         123 First St., city name state name
3           111         Sam - city name state name
4           111         Sam - 123 First St., state name
5           111         Sam - 123 First St., city name 
6           111         city name state name

(6 row(s) affected)

答案 4 :(得分:0)

你可以这样做:

SELECT UserID, CustomerNum, UserName + ' - ' + 
   ISNULL(UserAddress + ',','') + ISNULL(UserCity,'') + ' ' + ISNULL(UserState,'')
   AS UserInfo 
FROM Users 
WHERE (CustomerNum = @CustomerNum) ORDER BY UserName

答案 5 :(得分:0)

如果您想忽略空结果(排除它们),您可以将以下内容添加到WHERE。如果您需要这样做,可以使用ISNULLCOALESCE为空列选择空字符串。

...
WHERE UserName is not null
AND   UserAddress is not null
AND   UserCity is not null
AND   UserState is not null