これらは私のテーブルのデザインです:ここで注目すべきADO.NETでストアドプロシージャを使用して同じテーブルに複数の行を追加する方法は?
CREATE TABLE Member
(
Member_No UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Email VARCHAR(50) NOT NULL,
Phone BIGINT NOT NULL,
Username VARCHAR(50) NOT NULL,
Password VARCHAR(50) NOT NULL
)
CREATE TABLE Toy
(
Toy_No UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
Toy_Image VARBINARY(MAX) NOT NULL,
Toy_Name VARCHAR(50) NOT NULL,
Anime_Image VARBINARY(MAX) NOT NULL,
Anime_Name VARCHAR(50) NOT NULL,
Toy_Distributor_Image VARBINARY(MAX) NOT NULL,
Toy_Distributor VARCHAR(50) NOT NULL,
Price INTEGER NOT NULL,
Quantity INTEGER NOT NULL
)
CREATE TABLE Cart
(
Cart_No UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
Toy_No UNIQUEIDENTIFIER NOT NULL,
Member_No UNIQUEIDENTIFIER NOT NULL,
Total_Quantity INTEGER,
Total_Price INTEGER,
CONSTRAINT FK_ToyNo
FOREIGN KEY(Toy_No) REFERENCES Toy(Toy_No),
CONSTRAINT FK_MemberNo
FOREIGN KEY(Member_No) REFERENCES Member(Member_No)
)
CREATE TABLE Toy_Purchase
(
Toy_Purchase_No UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
Cart_No UNIQUEIDENTIFIER NOT NULL,
Toy_No UNIQUEIDENTIFIER NOT NULL,
Member_No UNIQUEIDENTIFIER NOT NULL,
Total_Quantity INTEGER NOT NULL,
Total_Price INTEGER NOT NULL,
Credit_Card_No BIGINT NOT NULL,
Purchase_Date DATETIME DEFAULT GETDATE() NOT NULL,
CONSTRAINT FK_CartNo
FOREIGN KEY(Cart_No) REFERENCES Cart(Cart_No),
CONSTRAINT FkToyNo
FOREIGN KEY(Toy_No) REFERENCES Toy(Toy_No),
CONSTRAINT FkMemberNo
FOREIGN KEY(Member_No) REFERENCES Member(Member_No)
)
一つ重要なことは、Cart
テーブルのTotal_Quantity
とTotal_Price
に記録された値は、ストアドプロシージャを通じてTotal_Quantity
とToy_Purchase
テーブルのTotal_Price
に渡され、挿入されることです私が最後にデモするPurchaseToys
と呼ばれるものです。
これはAddToCart
と呼ばれるストアドプロシージャで、1つ以上の数量の異なるおもちゃを選択し、カートに追加します。
CREATE PROCEDURE AddToCart
@CartNo UNIQUEIDENTIFIER OUTPUT,
@ToyNo UNIQUEIDENTIFIER OUTPUT,
@MemberNo UNIQUEIDENTIFIER OUTPUT,
@TotalQuantity INTEGER,
@TotalPrice INTEGER OUTPUT
AS
BEGIN
SET @CartNo = NEWID()
SET @ToyNo = (SELECT Toy_No FROM Toy)
SET @MemberNo = (SELECT Member_No FROM Member)
SET @TotalPrice = @TotalQuantity*(SELECT Price FROM Toy WHERE [email protected])
INSERT INTO Cart(Cart_No, Toy_No, Member_No, Total_Quantity, Total_Price)
VALUES(@CartNo, @ToyNo, @MemberNo, @TotalQuantity, @TotalPrice)
END
これは私がそれを購入する前に私のカートに追加したおもちゃのアイテムの一覧が表示されますDisplayCart
と呼ばれる私のストアドプロシージャです。
CREATE PROCEDURE DisplayCart
AS
BEGIN
SELECT
Toy_Image, Toy_Name, Total_Quantity, Total_Price
FROM
Toy, Cart
WHERE
Toy.Toy_No = Cart.Toy_No
END
これはPurchaseToys
と呼ばれるストアドプロシージャです。この手続きは、クレジットカート番号を入力して、ウェブサイトの[支払いの確認]ボタンをクリックした後にのみ実行されます。通常
CREATE PROCEDURE PurchaseToys
@ToyPurhcaseNo UNIQUEIDENTIFIER OUTPUT,
@CartNo UNIQUEIDENTIFIER OUTPUT,
@ToyNo UNIQUEIDENTIFIER OUTPUT,
@MemberNo UNIQUEIDENTIFIER OUTPUT,
@TotalQuantity INTEGER OUTPUT,
@TotalPrice INTEGER OUTPUT,
@CreditCardNo BIGINT,
@PurchaseDate DATETIME OUTPUT
AS
BEGIN
SET @ToyPurhcaseNo = NEWID()
SET @CartNo = (SELECT Cart_No FROM Cart)
SET @ToyNo = (SELECT Toy_No FROM Toy)
SET @MemberNo = (SELECT Member_No FROM Member)
SET @TotalQuantity = (SELECT Total_Quantity FROM Cart WHERE Cart_No = @CartNo) -- I'm planning to pass the value of Total_Quantity in Toy_Purchase table from Total_Quantity of Cart table
SET @TotalPrice = (SELECT Total_Price FROM Cart WHERE Cart_No = @CartNo) -- I'm planning to pass the value of Total_Price in Toy_Purchase table from Total_Price of Cart table
SET @PurchaseDate = GETDATE()
INSERT INTO Toy_Purchase (Toy_Purchase_No, Cart_No, Toy_No, Member_No, Total_Quantity, Total_Price, Credit_Card_No, Purchase_Date)
VALUES (@ToyPurhcaseNo, @CartNo, @ToyNo, @MemberNo, @TotalQuantity, @TotalPrice, @CreditCardNo, @PurchaseDate)
UPDATE Toy
SET Quantity = Quantity - Total_Price
FROM Toy, Toy_Purchase
WHERE Toy.Toy_No = Toy_Purchase.Toy_No
END
あなたはPurchaseToys
と呼ばれるこのストアドプロシージャのロジックを見れば、それはToy_Purchaseテーブルにのみ、単一の行を挿入し、Toy
テーブルのQuantity
列の値は、単一のおもちゃのために削減されます。
しかし、選択したおもちゃの数に基づいてToy_Purchase
テーブルに複数の行を挿入したいとします。たとえば、2つの異なるおもちゃを購入した場合、ストアドプロシージャはToy_Purchase
テーブルに2行を挿入し、Toy
テーブルのQuantity
カラム値は2つの異なるおもちゃのために減らされます。
私が4種類のおもちゃを購入した場合、ストアドプロシージャはToy_Purchase
テーブルに4行を挿入し、トイテーブルのQuantity
列の値は4種類のおもちゃのために減らされます。
したがって、Toy_Purchase
テーブルに複数の行が挿入され、Quantity
列の値が、選択された異なる玩具の数がADO.NETのストアドプロシージャによって減少することを確認するにはどうすればよいですか?
[習慣が悪い:古いスタイルのJOINを使用](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- ANSI - ** 92 ** SQL標準(** 25 years ** ago)の* * ANSI 'JOIN'構文で置き換えられたold *スタイルのカンマ区切りのテーブル*その使用は推奨されません –