Я пытаюсь сравнить столбец col1
и переменную @myvar
в предложении WHERE
. Оба обычно содержат GUID, но могут также иметь значения NULL. Я думал, что смогу обойти тот факт, что NULL=NULL
оценивает FALSE, используя WHERE ISNULL(col1, '')=ISNULL(@myvar, '')
. Это вместо этого сравнило бы две пустые строки и оценило бы значение TRUE.SQL Server: ISNULL on uniqueidentifier
Это, однако, производит следующее сообщение об ошибке:
Msg 8169, Level 16, состояние 2, строка 3 преобразования не удалось при преобразовании из строки символов UniqueIdentifier.
Я попытался
DECLARE @myvar uniqueidentifier = NULL
SELECT ISNULL(@myvar,'') as col1
То же сообщение об ошибке.
Два вопроса: Во-первых, я пытаюсь преобразовать переменную uniqueidentifier - даже если она имеет значение NULL - в строку (пусто!), А не наоборот, как это предлагает сообщение об ошибке. Что дает?
Во-вторых, есть ли лучший способ сформулировать предложение WHERE, которое нужно для сравнения уникальных идентификаторов, которые могут быть NULL?
Вы хотите ваши действительные уникальные идентификаторы также будут преобразованы в строки? – shawnt00
shawnt00, для предложения WHERE не-NULL uniqueidentifiers не нужно преобразовывать в строки. Сравнивая их, нужно только оценить TRUE, поэтому я получаю только записи, где они равны. – TVogt