1
ストアドプロシージャを使用して複数の場所を1人の顧客に追加する方法に問題があります。以下は、私のテーブルです、私は私が一人の顧客に複数の場所を追加することができます助けるために、インデックスを使用していますが、あまりにもする必要があり、私ストアドプロシージャを使用して複数の場所を1人の顧客に追加する方法は?
SELECT @intLocationIndex = MAX(intLocationIndex) +1
?
CREATE TABLE TCustomer
(
intCustomerID INTEGER NOT NULL,
strCustomerName VARCHAR(50) NOT NULL,
strAddress VARCHAR(50) NOT NULL,
CONSTRAINT TCustomer_PK PRIMARY KEY (intCustomerID)
)
CREATE TABLE TCustomerLocation
(
intLocationID INTEGER NOT NULL,
intLocationIndex INTEGER NOT NULL,
intCustomerID INTEGER NOT NULL,
CONSTRAINT TCustomerLocation_PK
PRIMARY KEY(intLocationID, intLocationIndex)
)
CREATE TABLE TLocation
(
intLocationID INTEGER NOT NULL,
strLocationName VARCHAR(50) NOT NULL,
strLocationAddress VARCHAR(50) NOT NULL,
strLocationCity VARCHAR(50) NOT NULL,
CONSTRAINT TLocation_PK PRIMARY KEY(intLocationID)
)
CREATE PROCEDURE uspAddCustomerLocation
@strCustomerName VARCHAR(50),
@strAddress VARCHAR(50),
@strLocationName VARCHAR(50),
@strLocationAddress VARCHAR(50),
@strLocationCity VARCHAR(50)
AS
BEGIN TRANSACTION
SET XACT_ABORT ON
DECLARE @intCustomerID INTEGER
SELECT @intCustomerID = MAX(intCustomerID) + 1
FROM TCustomer (TABLOCKX) -- LOCK TABLE UNTIL THE END OF TRANSACTION
SELECT @intCustomerID = COALESCE(@intCustomerID , 1)
INSERT INTO TCustomer (intCustomerID, strCustomerName , strAddress)
VALUES(@intCustomerID ,@strCustomerName ,@strAddress)
DECLARE @intLocationID INTEGER
DECLARE @intLocationIndex INTEGER
SELECT @intLocationID = MAX(intLocationID) + 1
FROM TLocation (TABLOCKX) -- LOCK TABLE UNTIL THEEND OF TRANSACTION
COMMIT TRANSACTION
GO
となると思います。手順コードはベンダー固有のものです** ** - mysql、postgresql、sql-serverのいずれを使用するかを指定するタグを付けてください。 、 'oracle'または' db2' - あるいは全く別のものです。 –
私は最終的に 'TABLOCKX'ヒントから 'sql-server'を推測するつもりです –