在代码中生成最新int类型主外键的不同方法

pun*_*eet 0 c# sql sql-server sql-server-2005

我是sql的新手.我在数据库中添加了2个新表.第一个主键是另一个的外键.键的类型是整数.现在我想在代码中生成密钥并将其分配给新数据,以便表的不同行之间的关联是正确的.如何确保密钥的唯一性,并从数据库中获取最新密钥,以便在保存时不会出现错误.

如果我使用了guid,那么我会为主键分配一个新的guid,然后将其分配给另一个表中的外键.还有多个客户端和一个保存数据的服务器.

要插入到两个表中的数据在c#代码中确定,而不是从插入主表中的行派生的.即使在db中获取id,那么行之间的关系也应该以某种形式存储在代码中,因为之后它就会丢失.

mar*_*c_s 16

唯一可行的办法来做到这一点是使用INT IDENTITY了SQL Server数据库提供.相信我在这一个-你想要尝试这样做你自己!

只是用

CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1),  ...other columns...)
Run Code Online (Sandbox Code Playgroud)

并完成它.

在第一个表中插入一行后,您可以检索标识列的值,如下所示:

-- do the insert into the first table
INSERT INTO dbo.YourTableOne(Col1, Col2, ...., ColN)
VALUES (Val1, Val2, ...., ValN)

DECLARE @NewID INT

-- get the newly inserted ID for future use
SELECT @NewID = SCOPE_IDENTITY()

-- insert into the second table, use first table's new ID for your FK column
INSERT INTO dbo.YourTableTwo (FKColumn, ......) VALUES(@NewID, ......)
Run Code Online (Sandbox Code Playgroud)

更新:如果需要在第一个表中插入多行并捕获多个生成的ID值,请使用以下OUTPUT子句:

-- declare a table variable to hold the data
DECLARE @InsertedData TABLE (NewID INT, ...some other columns as needed......)

-- do the insert into the first table
INSERT INTO dbo.YourTableOne(Col1, Col2, ...., ColN)
OUTPUT Inserted.ID, Inserted.Col1, ..., Inserted.ColN INTO @InsertedData(NewID, Col1, ..., ColN)
VALUES (Val1, Val2, ...., ValN)
Run Code Online (Sandbox Code Playgroud)

然后从那里开始 您可以从新插入的行中获取任何值到临时表变量中,这将允许您决定将哪些新ID值用于第二个表的哪些行