0

たとえば、新しい顧客を作成するストアド プロシージャを作成しています。

CREATE PROCEDURE Customer_Create
@customer_arg
@type_arg
AS
BEGIN
INSERT INTO Customer (Customer_id, Type_id)
VALUES (@Customer_arg,@type_arg)
End;

ステートメントに複数の外部キーがあり、それらがすべて ID である場合、execute ステートメントを実行するときに頭の中で何が起こるかを知らなくても、自動的に NEXT ID 番号を取得する方法はありますか? 前のレコードが 1 だったので ID が 2 になるという事実を引き出してもらいたいだけです

EXECUTE Customer_Create 16,2

それは何かと一緒outputですか?もしそうなら、これはコード的にどのように機能しますか

4

3 に答える 3

1

あなたがしたいことは、レコードが挿入された後に新しいIDを返すことだと思います。そのために:

CREATE PROCEDURE Customer_Create (
    @customer_arg,
    @type_arg,
    @NewCustomerId int output
) AS
BEGIN
    INSERT INTO Customer(Customer_id, Type_id)
        VALUES (@Customer_arg, @type_arg);

    @NewCustomerId = scope_identity();
End;

ID を取得する方法は他にもいくつかありますが、ここで説明します。

于 2013-04-22T00:05:02.913 に答える
1

最後に挿入された IDENTITY 値を取得するには、次のOUTPUTような句を使用する必要があります。

DECLARE @IdentValues TABLE(v INT);

INSERT INTO dbo.IdentityTest 
OUTPUT INSERTED.id INTO @IdentValues(v)
DEFAULT VALUES;

SELECT v AS IdentityValues FROM @IdentValues;

他にもいくつかのメカニズムがあります@@IDENTITYが、それらにはすべて重大な問題があります。詳細については、アイデンティティ クライシスの記事を参照してください。

于 2013-04-22T00:08:03.033 に答える
0

あなたの場合、このように @IDENTITY を試すこともできます

DECLARE @NextID int
--insert statement goes here
SET @NextID = @@Identity`

これに慣れるためのいくつかの優れたリソースを次に示します

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

http://blog.sqlauthority.com/2013/03/26/sql-server-identity-fields-review-sql-queries-2012-joes-2-pros-volume-2-the-sql-query-techniques-チュートリアル-for-sql-server-2012/

于 2013-04-23T08:37:10.370 に答える