私は SQL Server にかなり慣れていないので、どんな意見やアドバイスも大いに役立ちます。
1 対多の関係にある 3 つのテーブルがあります。
テーブルPerson
には顧客情報が保持されます
CREATE TABLE [dbo].[Person](
[PID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](255) NULL,
[LastName] [varchar](255) NULL,
[CAddress] [varchar](255) NULL,
[Ccity] [varchar](255) NULL,
[Cstate] [varchar](2) NULL,
[Czipcode] [varchar](20) NULL,
[Ccountry] [varchar](255) NULL,
[Cphone] [varchar](25) NULL,
[Cemail] [varchar](255) NULL,
[CipAddress] [varchar](255) NULL)
テーブルTransaction
はトランザクションを保持します
CREATE TABLE [dbo].[Transaction](
[TID] [int] IDENTITY(1,1) NOT NULL,
[PID] [int] NOT NULL,
[DateOfTransaction] [date] NULL)
TransactionDetail
トランザクションの詳細を保持する 3 番目のテーブル
CREATE TABLE [dbo].[TransactionDetail](
[TDID] [int] IDENTITY(1,1) NOT NULL,
[TID] [int] NULL,
[ProductID] [int] NULL,
[ProductName] [varchar](255) NULL,
[ProductQTY] [int] NULL,
[ProductPrice] [decimal](18, 2) NULL)
Person
テーブルに一度挿入してから、複数の詳細を 3 番目のテーブルに挿入するストアド プロシージャを作成したいと思います。
これは私が得たものです。これが正しいかどうかわかりませんか?
CREATE TYPE dbo.TransactionTableType AS TABLE
( TID int, ProductID int, ProductName varchar(255), ProductQTY int, ProductPrice decimal(18,2) )
go
CREATE PROCEDURE insertTransacion
@NewProduct dbo.TransactionTableType READONLY,
@FirstName varchar(255),
@LastName varchar(255),
@CAddress varchar(255),
@Ccity varchar(255),
@Cstate varchar(2),
@Czipcode varchar(20),
@Ccountry varchar(255),
@CPhone varchar(25),
@Cemail varchar(255),
@CipAddress varchar(255),
@DateOfTrans date
as
begin
SET NOCOUNT ON;
DECLARE @Pid int
insert into Person(FirstName,LastName,CAddress,Ccity,Cstate,Czipcode,Ccountry,Cphone,Cemail,CipAddress) values (@FirstName,@LastName,@CAddress,@Ccity,@Cstate,@Czipcode,@Ccountry,@CPhone,@Cemail,@CipAddress)
SET @Pid = SCOPE_IDENTITY()
insert into PTransactions(PID, DateOfTransaction) values (@Pid, @DateOfTrans)
DECLARE @Tid int
SET @Tid = SCOPE_IDENTITY()
insert into TransactionDetail(TID, ProductID, ProductName, ProductQTY, ProductPrice) Select @Tid, ntd.ProductID, ntd.ProductName, ntd.ProductQTY, ntd.ProductPrice from @NewProduct as ntd
end
ストアドプロシージャでこれを行う方法がわからない adoを使用してasp.netでプログラムで行う方法を知っていますが、それを避けようとしています。文法について申し訳ありません。