我有以下查询:
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)
);
答案 0 :(得分:4)
Max
将始终返回NULL
。所以你可以使用ISNULL
。
SELECT ISNULL(MAX(ResourceId), 999)
FROM dbo.ResourceOrderFormContent
WHERE DisplayTitle = @ResourceName