0

ユーザーがデータベースにアイテムを挿入できるフォームがあります。最後に挿入された ID 値を取得するために Scope_Identity() を呼び出します。これは正常に動作します。アイテムを挿入すると、パスワードがランダムに生成され、データベースにも保存されます。アイテムが挿入された直後に、このパスワードも取得する必要があります。どうすればいいですか?

4

4 に答える 4

1

SQl Server 2008を使用している場合は、スコープIDの代わりに出力句を使用できます。output句を使用すると、複数のフィールドを出力できます。Books onlineのコードの例:

DECLARE @MyTableVar table( ScrapReasonID smallint,
                           Name varchar(50),
                           ModifiedDate datetime);
INSERT Production.ScrapReason
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
        INTO @MyTableVar
VALUES (N'Operator error', GETDATE());
于 2010-02-10T14:27:47.323 に答える
0

おそらく、挿入が行われる前に新しいパスワードへの参照を取得できます。これが最良のアプローチだと思います-これにより、パスワードを読み取るために INSERT に続いて SELECT を実行する必要がなくなります-2番目のステップが削除されます。

たとえば、NEWID() を使用してパスワードを生成するとします。

DECLARE @Pwd VARCHAR(36)
DECLARE @NewId INTEGER
SELECT @Pwd = CAST(NEWID() AS VARCHAR(36))

INSERT MyTable (SomeField, Pwd)
VALUES (@SomeValue, @Pwd)

SELECT @NewId = SCOPE_IDENTITY()

@Pwd と @NewId は OUTPUT パラメーターになります (これは sproc として行います)。IMOこれは、可能であれば不要な読み取りを行うよりも望ましいでしょう。

(NB。実際にパスワードを保存する方法についてのポイントを無視しています/プレーンテキストではありません)

于 2010-02-10T13:13:31.503 に答える
0

Scope_Identity() を呼び出して受け取った ID に基づいてパスワードを取得するクエリを実行します。

どのような技術を使用していますか?

于 2010-02-10T13:01:06.673 に答える
0

擬似コード:

insert into sometable
declare @ID int  
set @ID = Scope_Identity()
select password from passwordtable where id = @ID
于 2010-02-10T13:03:48.803 に答える