Как проверить, является ли аргумент в хранимой процедуре пустым GUID или нет?
Проверьте наличие пустого GUID в SQL
Ответ 1
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
Ответ 2
Так как пустой guid никогда не изменяется, другим очевидным способом является просто использовать 00000000-0000-0000-0000-000000000000
, а не вычислять его.
If @Param = '00000000-0000-0000-0000-000000000000'
...
Или, если в процедуре вы можете установить параметр как константу:
Declare @EmptyGuid uniqueidentifier
Set @EmptyGuid = '00000000-0000-0000-0000-000000000000'
Или вы можете создать скалярную пользовательскую функцию, которая просто возвращает указанное постоянное значение (или пересчитывает его, как в решении Meiscooldude).
Ответ 3
Как насчет проверки: null:
DECLARE @MyId as UNIQUEIDENTIFIER = (SELECT Id FROM dbo.MyTable WHERE ...)
IF @MyId IS NULL
BEGIN
RAISERROR ('Id is NULL!', 16, 1)
RETURN
END
Ответ 4
использование
DECLARE @param UNIQUEIDENTIFIER = NEWID();
--DECLARE @param UNIQUEIDENTIFIER = '00000000-0000-0000-0000-000000000000'
IF (CONVERT(UNIQUEIDENTIFIER, 0x00)) = @param
PRINT 'Empty';
ELSE
PRINT 'Not Empty';
Ответ 5
DECLARE @EmptyGuid UNIQUEIDENTIFIER = 0x0
DECLARE @NonEmpty UNIQUEIDENTIFIER = NEWID()
IF @EmptyGuid = 0x0 PRINT 'Empty'
IF @NonEmpty = 0x0 PRINT 'Empty' ELSE PRINT 'NonEmpty'
Напечатает
Пустой
NonEmpty
Ответ 6
Вы можете сделать пустой Guid следующим образом:
DECLARE @EmptyGuid UNIQUEIDENTIFIER
SET @EmptyGuid = (SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER))
-- Single result is 00000000-0000-0000-0000-000000000000
SELECT @EmptyGuid
Ответ 7
DECLARE @SupplierDataHubId uniqueidentifier=null
set @SupplierDataHubId=(select HubId from dbo.tblSupplierData where fldUpc='603259049389' OR fldEan='6032590493895555')
if (@SupplierDataHubId is not null)
begin
print('yes');
end
else
print 'no'