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值用于第二个表的哪些行
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |