2

私は 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でプログラムで行う方法を知っていますが、それを避けようとしています。文法について申し訳ありません。

4

1 に答える 1

0

簡単に言えば、できないということです。ただし、いくつかのオプションが用意されています。

SP を作成して個人データを入力し、別の SP を作成してデータを挿入することができます (一度に 1 行ずつ)。最初の呼び出しで個人 ID 値を返し、それを後続の SP 呼び出しで使用してデータを挿入します。この道をたどる場合は、問題が発生した場合にすべてをロールバックできるように、呼び出しコードをトランザクション オブジェクトにラップしてください。コードの残りの部分で使用している言語を明記していませんか?

2 番目のオプションは、SQL 一括挿入コマンドを確認することです。これは、3 番目のテーブルに追加するデータが大量にある場合に最適です。ただし、最初にそのデータをファイルに書き出す必要があります - 少し面倒ですが、その後は非常に高速です。追加する行が数千行以上ある場合に非常に適しています。

開発言語に応じて、他にもいくつかのオプションがあります。

乾杯サイモン

于 2013-01-23T10:22:33.617 に答える