我有3个数据表来更新数据库
Invoice
表,主键为InvoiceNo
InvoiceProduct
表,主键为InvoiceProductNo
,外键为InvoiceNo
InvoiceProductExp
表,主键为InvoiceProductExpNo
,外键为InvoiceNo
和InvoiceProductNo
事实:
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
是自动编号?
答案 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')