Функция ISnull требует двух аргументов - PullRequest
0 голосов
/ 22 мая 2019

Я преобразовываю свой запрос 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 ]

3 голосов
/ 22 мая 2019

Я бы выразил эту логику:

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 NULL для сравнения с NULL значениями
  • COALESCE() для замены значения NULL чем-то другим
  • Другие строковые функции в зависимости от вашей проблемы
2 голосов
/ 22 мая 2019

Заменить 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...