以下情况:
我有一个用于在ESX环境中创建VM的ASP.NET网站。 用户可以选择一些设置,然后单击按钮以创建VM。
此按钮的Click-Event检查值并将其写入MS SQL Server。
该表格有primary key (Integer, IDENTITY)
,我无需插入(因为IDENTITY
)。
但是我需要这个主键,因为我在事件之后将用户重定向到另一个页面,并且该页面需要主键进行常规查询(使用查询字符串发送它)。
目前,我在INSERT INTO
查询后直接进行SELECT查询并取最后一个条目。
只要只有一个用户使用此页面,该功能就可以使用。
我的问题是:
是否可以直接从IDENTITY
查询中接收INSERT INTO
主键(如函数的返回值)?
答案 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来解决你的问题。
序列自动生成一系列唯一编号,可用作主键。