ISnull函数需要两个参数

时间:2019-05-22 11:06:13

标签: sql sql-server

我正在将MSAccess查询转换为SQL视图,但无法复制错误

Create View [Employees Extended]
AS
SELECT IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[Last Name] & "," & [First Name])) AS [File As]
,IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[First Name] & " " & [Last Name])) AS [Employee Name], Employees.*
FROM Employees
ORDER BY IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[Last Name] & ", " & [First Name]))
,IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[First Name] & " " & [Last Name]));
  

ISNull需要两个参数

2 个答案:

答案 0 :(得分:3)

我会表达这种逻辑:

IIf(IsNull([Last Name]),
    IIf(IsNull([First Name]),
       [Company],[First Name]
       ),
    IIf(IsNull([First Name]),
        [Last Name],
        [Last Name] & "," & [First Name]
       )
    ) AS [File As]

在SQL Server中为:

COALESCE([First Name] + ',', '') + [Last Name]

实际上,我会在MS Access中使用类似的逻辑:

NZ([First Name] & ",", "") & [Last Name]

在SQL Server中,您应该使用:

  • +CONCAT()连接字符串
  • 字符串函数的单引号不是双引号
  • IS NULLNULL的值进行比较
  • COALESCE()NULL值替换为其他内容
  • 适合您问题的其他字符串函数

答案 1 :(得分:2)

ISNULL(ColumnName)替换为ColumnName IS NULL

ISNULL是SQL Server不会根据布尔表达式是否返回NULL而返回布尔结果。如果第一个参数的值为ISNULL,则NULL将返回第二个参数的值(返回的数据类型将是第一个参数的数据类型)。

例如,在以下查询中:

SELECT ISNULL(A,B)
FROM (VALUES('a',1),
            (NULL,2),
            ('b',NULL)) V(A,B);

将返回以下值:

'a'
'2'  --note this is a string, not an integer
'b'