как получить данные элемента сразу после вставки - PullRequest
0 голосов
/ 10 февраля 2010

У меня есть форма, которая позволяет пользователям вставлять элементы в базу данных. Я вызываю Scope_Identity (), чтобы получить последнее вставленное значение идентификатора. Это работает хорошо. При вставке элемента случайно генерируется пароль, который также сохраняется в моей базе данных. Мне нужно также восстановить этот пароль, сразу после того, как элемент будет вставлен. Как мне это сделать?

Ответы [ 4 ]

1 голос
/ 10 февраля 2010

Если вы используете SQl Server 2008, вы можете использовать предложение вывода вместо идентификатора области. С помощью предложения output вы можете вывести более одного поля. Пример кода из Книги онлайн:

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());
0 голосов
/ 10 февраля 2010

псевдокод:

insert into sometable
declare @ID int  
set @ID = Scope_Identity()
select password from passwordtable where id = @ID
0 голосов
/ 10 февраля 2010

Предположительно, вы можете получить ссылку на новый пароль до того, как произойдет вставка, что, я думаю, будет лучшим подходом - это предотвратит необходимость выполнения INSERT с последующим SELECT для считывания пароля - удаляет второй шаг.

например. Допустим, вы используете 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). ИМО, это было бы предпочтительнее, чем делать ненужное чтение, если это вообще возможно.

(NB. Я игнорирую вопросы о том, как на самом деле хранить пароли / не в текстовом формате)

0 голосов
/ 10 февраля 2010

Выполните запрос для получения пароля на основе идентификатора, который вы только что получили, вызвав Scope_Identity ().

Какие технологии вы используете?

...