1

我有 3 个数据表来更新数据库

  • Invoice表,主键是InvoiceNo
  • InvoiceProduct表,主键是InvoiceProductNo外键InvoiceNo
  • InvoiceProductExp表,主键是InvoiceProductExpNo,外键是InvoiceNoInvoiceProductNo

事实:

  • 一个InvoiceNo有很多InvoiceProductNo
  • 一个InvoiceProductNo有很多InvoiceProductExpNo

3 数据表数据条目例如是

Invoice (InvoiceNo,...)
(0001,...)

InvoiceProduct (InvoiceProductNo, InvoiceNo)
(1,0001,...)
(2,0001,...)

InvoiceProductExp (InvoiceProductExpNo,InvoiceProductNo,InvoiceNo)
(1,1,0001,...) 
(2,1,0001,...)
(3,2,0001,...)
(4,2,0001,...)

问题是我喜欢为Identity3 个表的所有主键使用 SQL Server 生成的列

我该如何准备insert陈述?

Insert Into InvoiceProductExp values (auto_number, ?, ?)

由于是自动编号,我如何才能InvoiceProductNo插入InvoiceProductExp表格?InvoiceProductNo

4

3 回答 3

3

您正在寻找SCOPE_IDENTITY()

DECLARE @InvoiceNo INT
DECLARE @InvoiceProductNo INT

INSERT INTO Invoice ([Date])
VALUES (GETDATE())

SELECT @InvoiceNo = SCOPE_IDENTITY()

INSERT INTO InvoiceProduct([InvoiceNo])
VALUES (@InvoiceNo)

SELECT @InvoiceProductNo = SCOPE_IDENTITY()

INSERT INTO InvoiceProductExp ([InvoiceProductNo], [InvoiceNo])
VALUES (@InvoiceProductNo, @InvoiceNo)

这是SQLFiddle演示

于 2013-07-20T04:41:33.283 回答
0

如果您的主键是标识列类型,那么您不必在主键列中插入值。当行提交到数据库时,标识列将自动填充。

这能解决你的问题吗?

于 2013-07-20T04:07:24.603 回答
0

为什么一定要手动?您可以将您的ID设置为自动递增。创建表时:

UserID INT IDENTITY(1,1) NOT NULL

示例(创建表)

CREATE TABLE dbo.Tool(
   UserID INT IDENTITY NOT NULL PRIMARY KEY, 
   Name VARCHAR(40) NOT NULL
)

插入值

INSERT INTO dbo.Tool(Name) VALUES ('Person 1')
INSERT INTO dbo.Tool(Name) VALUES ('Person 2')
于 2013-07-20T04:24:37.877 回答