Как я проверяю, является ли аргументом в хранимой процедуре пустой GUID или нет?
SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
Это должно вернуть ваш пустой гид.
... или даже короче, сохраняя одно приведение:
SELECT CAST(0x0 AS UNIQUEIDENTIFIER)
Итак, чтобы проверить это, вы должны сделать
IF @GuidParam = CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
BEGIN
--Guid is empty
END
Поскольку пустой guid никогда не изменяется, другой очевидный способ - просто использовать 00000000-0000-0000-0000-000000000000
, а не вычислять его.
If @Param = '00000000-0000-0000-0000-000000000000'
...
Или, если в процедуре, вы можете установить параметр, который будет действовать как константа:
Declare @EmptyGuid uniqueidentifier
Set @EmptyGuid = '00000000-0000-0000-0000-000000000000'
Или вы можете создать скалярную определяемую пользователем функцию, которая просто возвращает указанное выше постоянное значение (или пересчитывает его, как в решении Meiscooldude) .