Подтвердить что ты не робот

Преобразование NULL в пустую строку. Ошибка преобразования при преобразовании из символьной строки в uniqueidentifier

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

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

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

  • Как заставить сервер возвращать пустую строку для ParentId = NULL
4b9b3361

Ответ 1

SELECT Id   'PatientId',
       ISNULL(CONVERT(varchar(50),ParentId),'')  'ParentId'
FROM Patients

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


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

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

Ответ 2

Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients

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

Select ID, IsNull(ParentID,'') from Patients

Ответ 3

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

SELECT Id   'PatientId',
       ISNULL(CAST(ParentId as nvarchar(100)),'')  'ParentId'
FROM Patients