我对 SQL Server 相当陌生,任何输入和建议都会有很大帮助。
我有 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
,其中包含交易详细信息
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
然后在第三个表中插入多个详细信息。
这就是我得到的我不确定这是否正确?
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
不知道如何在存储过程中执行此操作我知道如何在 asp.net 中使用 ado 以编程方式执行此操作,但是我试图避免这种情况。对不起语法。