2010-02-10 1 views
0

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

+0

Вы делаете это внутри sp? –

+0

Вы используете наборы данных? или 3-й участник DAL? –

ответ

0

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

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

+0

Спасибо за помощь. Я просто подумал, что может быть другой путь. – Anelim

0

псевдо-код:

insert into sometable 
declare @ID int 
set @ID = Scope_Identity() 
select password from passwordtable where id = @ID 
0

Предположительно, вы можете получить ссылку на новый пароль перед вставкой имеет место, которое я думаю, был бы лучший подход - это предотвратит необходимость делать вставки с последующим 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 будет выходных параметров (я бы сделать это как sproc). ИМО это было бы предпочтительнее делать ненужное чтение, если это вообще возможно.

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

1

Если вы используете SQL Server 2008 можно использовать пункт вывода вместо идентичности областей видимости. С выводом вывода вы можете выводить более одного поля. пример кода из книг онлайн:

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());