У меня есть следующий запрос:По умолчанию значение, когда запрос подзапроса терпит неудачу?
INSERT INTO dbo.ResourceOrderCustomersOrders
(OrderId ,
Type ,
CustomerId ,
ResourceId ,
Quantity ,
Created ,
CreatedBy
)
VALUES ((SELECT MAX(OrderId) + 1
FROM dbo.ResourceOrderCustomersOrders
) , -- OrderId - int
'PENDING' , -- Type - varchar(50)
(SELECT MAX(CustomerId)
FROM dbo.ResourceOrderCustomers
WHERE UPPER(FirstName) = UPPER(@Firstname)
AND UPPER(Surname) = UPPER(@Surname)
AND UPPER(Email) = UPPER(@Email)
) , -- CustomerId - int
(SELECT MAX(ResourceId)
FROM dbo.ResourceOrderFormContent
WHERE DisplayTitle = @ResourceName
) , -- ResourceId - int
@ResourceQuantity ,
GETDATE() , -- Created - datetime
'WebsiteForm' -- CreatedBy - varchar(20)
);
В тех случаях, когда подзапрос терпит неудачу, я хотел бы по умолчанию значения моего выбора (держать неуказанные записи).
Например, были следующими действиями, чтобы не получить результат, потому что запись не существует:
SELECT MAX(ResourceId)
FROM dbo.ResourceOrderFormContent
WHERE DisplayTitle = @ResourceName
Тогда я хотел бы вернуть номер «999» (неопределенная запись). Какой был бы лучший способ приблизиться к этому?
Я пытался использовать try/catch, но мне говорят, что это недопустимый синтаксис. Вот моя попытка:
INSERT INTO dbo.ResourceOrderCustomersOrders
(OrderId ,
Type ,
CustomerId ,
ResourceId ,
Quantity ,
Created ,
CreatedBy
)
VALUES ((SELECT MAX(OrderId) + 1
FROM dbo.ResourceOrderCustomersOrders
) , -- OrderId - int
'PENDING' , -- Type - varchar(50)
(SELECT MAX(CustomerId)
FROM dbo.ResourceOrderCustomers
WHERE UPPER(FirstName) = UPPER(@Firstname)
AND UPPER(Surname) = UPPER(@Surname)
AND UPPER(Email) = UPPER(@Email)
) , -- CustomerId - int
(BEGIN TRY
SELECT MAX(ResourceId)
FROM dbo.ResourceOrderFormContent
WHERE DisplayTitle = @ResourceName
END TRY
BEGIN CATCH
SELECT 999
END CATCH
) , -- ResourceId - int
@ResourceQuantity ,
GETDATE() , -- Created - datetime
'WebsiteForm' -- CreatedBy - varchar(20)
);
Oh duh. Мой мозг сегодня не работает - спасибо! – Codingo