3

次の状況:

ESX 環境で VM を作成するための ASP.NET Web サイトがあります。ユーザーはいくつかの設定を選択し、ボタンをクリックして VM を作成できます。

このボタンのクリック イベントは値をチェックし、MS SQL Server に書き込みます。テーブルには、primary key (Integer, IDENTITY)挿入する必要のない があります ( のためIDENTITY)。

しかし、イベントの後にユーザーを別のページにリダイレクトし、このページには通常のクエリ用の主キーが必要であるため、この主キーが必要です (クエリ文字列で送信します)。

現在、クエリの直後に SELECT クエリを作成しINSERT INTO、最後のエントリを取得します。これは、このページを使用するユーザーが 1 人だけである限り機能します。

私の質問は:

(関数からの戻り値のように) クエリIDENTITYから直接主キーを受け取ることは可能ですか?INSERT INTO

4

3 に答える 3

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 サーバーを使用していると仮定します)

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

于 2013-04-20T09:38:58.830 に答える
2

私の頭の上では、@@IDENTITYはあなたがここで求めているものです。

これはもちろん、MS SQL サーバーを使用していることを前提としています。

例えばInsert into xxx.... ; select @@IDENTITY

編集:

Mitch Wheat が指摘したように、@@SCOPE_IDENTITYは @@IDENTITY よりも優れたオプションです。これは、@@SCOPE_IDENTITY が現在のスコープの ID を返すのに対し、@@IDENTITY はトリガーまたは UDF によって作成された ID を返す場合があるためです。

于 2013-04-20T09:40:11.193 に答える