从数据表中插入许多Anto编号到DataBase

时间:2013-07-20 03:45:08

标签: sql database ado.net datatable

我有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,...)

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

如何准备insert语句?

Insert Into InvoiceProductExp values (auto_number, ?, ?)

如何将InvoiceProductNo插入InvoiceProductExp表,因为InvoiceProductNo是自动编号?

3 个答案:

答案 0 :(得分: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 演示

答案 1 :(得分:0)

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

这会解决您的问题吗?

答案 2 :(得分: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')