Преобразование NULL в пустую строку. Ошибка преобразования при преобразовании из символьной строки в uniqueidentifier
Используя SQL Server 2005, как получить приведенный ниже оператор или, скорее, вывод, как я хочу, чтобы он был.
SELECT Id 'PatientId',
ISNULL(ParentId,'') 'ParentId'
FROM Patients
ParenId - это uniqueidentifier
, который позволяет NULL
, но кажется, что оптимизатор запросов пытается также преобразовать ''
обратно в uniqueidentifier
для строк, где ParentId = NULL
. Как говорится в заголовке, точная информация об ошибке запрос бегунов бросает на мое лицо!
- Как заставить сервер возвращать пустую строку для
ParentId = NULL
Ответы
Ответ 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