3

以下情况:

我有一个用于在 ESX 环境中创建 VM 的 ASP.NET 网站。用户可以选择一些设置并单击一个按钮来创建 VM。

此按钮的 Click-Event 检查值并将其写入 MS SQL Server。该表有一个primary key (Integer, IDENTITY)我不需要插入的(因为IDENTITY)。

但我需要这个主键,因为我在事件发生后将用户重定向到另一个页面,而这个页面需要主键进行常规查询(使用查询字符串发送)。

目前,我在查询之后直接进行 SELECTINSERT INTO查询并获取最后一个条目。只要只有一个用户使用此页面,它就可以工作。

我的问题是:

是否可以IDENTITY直接从INSERT INTO查询中接收主键(如函数的返回值)?

4

3 回答 3

6

Yes.

Use the OUTPUT clause

example from the MSDN link:

The following example inserts a row into the ScrapReason table and uses the OUTPUT clause to return the results of the statement to the @MyTableVar table variable. Because the ScrapReasonID column is defined with an IDENTITY property, a value is not specified in the INSERT statement for that column.

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table( NewScrapReasonID smallint,
                           Name varchar(50),
                           ModifiedDate datetime);
INSERT Production.ScrapReason
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
        INTO @MyTableVar
VALUES (N'Operator error', GETDATE());

--Display the result set of the table variable.
SELECT NewScrapReasonID, Name, ModifiedDate FROM @MyTableVar;
--Display the result set of the table.
SELECT ScrapReasonID, Name, ModifiedDate 
FROM Production.ScrapReason;
GO

(Assuming you are using Sql Server)

-==========================

于 2013-04-20T09:38:58.830 回答
2

Off the top of my head, @@IDENTITY is what you want here.

That is of course assuming you are using MS SQL server.

eg Insert into xxx.... ; select @@IDENTITY

EDIT:

As Mitch Wheat pointed out, @@SCOPE_IDENTITY is a better option than @@IDENTITY. This is because @@SCOPE_IDENTITY returns the ID in the current scope, whereas @@IDENTITY may return an ID created by a trigger or a UDF.

于 2013-04-20T09:40:11.193 回答
-1

我认为您也可以使用 Sequence 来解决您的问题。

序列自动生成一系列唯一编号,可用作主键。

于 2013-04-20T10:09:38.837 回答