SQL查询后存储主键

时间:2013-04-20 09:37:45

标签: c# sql sql-server

以下情况:

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

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

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

目前,我在INSERT INTO查询后直接进行SELECT查询并取最后一个条目。 只要只有一个用户使用此页面,该功能就可以使用。

我的问题是:

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

3 个答案:

答案 0 :(得分:6)

使用OUTPUT子句

来自MSDN链接的示例:

  

以下示例将一行插入ScrapReason表中   使用OUTPUT子句将语句的结果返回给   @MyTableVar表变量。因为ScrapReasonID列是   使用IDENTITY属性定义,未在中指定值   该列的INSERT语句。

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

(假设您使用的是Sql Server)

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

答案 1 :(得分:2)

在我的头顶,@@IDENTITY就是你想要的。

当然假设您正在使用MS SQL服务器。

例如Insert into xxx.... ; select @@IDENTITY

修改

正如Mitch Wheat指出的那样,@@SCOPE_IDENTITY是比@@ IDENTITY更好的选择。这是因为@@ SCOPE_IDENTITY返回当前作用域中的ID,而@@ IDENTITY可能返回由触发器或UDF创建的ID。

答案 2 :(得分:-1)

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

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