1
は、私は次のクエリがありますサブクエリ文が失敗した場合のデフォルト値は?
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