Преобразовать NULL в пустую строку - преобразование не выполнено при преобразовании символьной строки в уникальный идентификатор - PullRequest
32 голосов
/ 29 марта 2012

Используя SQL Server 2005, как мне получить приведенный ниже оператор или, скорее, вывод, какой я хочу, чтобы он был.

SELECT Id   'PatientId',
       ISNULL(ParentId,'')  'ParentId'
FROM Patients

ParenId - это uniqueidentifier, который допускает NULL, но кажется, что запросоптимизатор также пытается преобразовать '' обратно в uniqueidentifier для строк, где ParentId = NULL. Как видно из заголовка, это точная информация об ошибке, которую обработчик запросов выдает мне в лицо !!

  • Как сделатья получаю сервер, чтобы вернуть пустую строку для ParentId = NULL

Ответы [ 3 ]

63 голосов
/ 29 марта 2012
SELECT Id   'PatientId',
       ISNULL(CONVERT(varchar(50),ParentId),'')  'ParentId'
FROM Patients

ISNULL всегда пытается вернуть результат, который имеет такой же тип данных, что и тип его первого аргумента.Итак, если вы хотите, чтобы результат был строкой (varchar), вам лучше убедиться, что это тип первого аргумента.


COALESCEобычно лучше использовать функцию, чем ISNULL, так как она учитывает все типы данных аргументов и применяет соответствующие правила приоритет для определения окончательного результирующего типа данных.К сожалению, в этом случае uniqueidentifier имеет более высокий приоритет, чем varchar, так что это не помогает.

(Это также обычно предпочтительнее, поскольку он распространяется на более чем два аргумента)

8 голосов
/ 20 ноября 2012
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients

Это необходимо, поскольку поле ParentID не относится к типу varchar / nvarchar. Это сделает трюк:

Select ID, IsNull(ParentID,'') from Patients
6 голосов
/ 29 марта 2012

Вам нужно CAST ParentId как nvarchar, чтобы выходные данные всегда были одного типа данных.

SELECT Id   'PatientId',
       ISNULL(CAST(ParentId as nvarchar(100)),'')  'ParentId'
FROM Patients
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...