SQLプログラミング(2012バージョン)クラスを使用していて、何度も何度もプログラムが動作しなくなることがあります。要件(質問)だけでなく、私がこれまでに持っているものは以下の通りです。破線の下には、エラー処理のために書いたもう一つのprocがあります。私はこれを完了するのを助けてください...してください!SQLトランザクション/ ErrorHandling/TryandCatch
/* StockName、NewOpenPrice、NewClosePriceを受け入れるストアドプロシージャを作成します。
a。在庫名が存在しない場合は、新しいレコードをdbo.Stocksテーブルに追加する必要があります。
b。在庫名が存在する場合、OpenPriceとClosePriceは新しく挿入された価格で更新されます。
c。挿入および更新ステートメントは、トランザクション(反復可能な読み取り分離レベル)を使用して構築する必要があります。
d。 Try Catchステートメントは、UpdateステートメントとInsertステートメントに使用する必要があります。エラーが発生した場合は、dbo.error_handlerストアドプロシージャを呼び出す必要があります。 */
CREATE PROCEDURE spc_Stocks
@Name varchar(25), @NewOpenPrice money, @NewClosePrice money
as
BEGIN
CREATE TABLE dbo.Stocks (
StockID int IDENTITY(1,1),
StockName varchar(50),
OpenPrice money,
ClosePrice money )
INSERT INTO dbo.Stocks
SELECT 'Walmart',21.58,22.98 UNION
SELECT 'Target',17.32,15.23 UNION
SELECT 'Taco Bell',4.58,12.98 UNION
SELECT 'Microsoft',7.15,8.15 UNION
SELECT 'Apple',10.79,9.89
Select StockName from stocks
where StockName = @Name
------Name does NOT exist
if (@Name = NULL)
Begin
Insert into dbo.Stocks (StockName)
Values (@Name)
END
----If name DOES exist
ELSE
BEGIN
Begin TRY
Begin SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
UPDATE dbo.Stocks SET OpenPrice [email protected], ClosePrice= @NewClosePrice where StockName = @Name
Commit transaction
END TRY
BEGIN CATCH
?!?!?!?!?!?
*これは私のErrorHandlerストアドプロシージャのクエリ
ALTER PROCEDURE dbo.error_handler
as
BEGIN
DECLARE @errnum INT,
@severity INT,
@errstate INT,
@proc NVARCHAR(126),
@line INT,
@message NVARCHAR(4000)
-- capture the error information that caused the CATCH block to be invoked
SELECT @errnum = ERROR_NUMBER(),
@severity = ERROR_SEVERITY(),
@errstate = ERROR_STATE(),
@proc = ERROR_PROCEDURE(),
@line = ERROR_LINE(),
@message = ERROR_MESSAGE()
end