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