У меня есть форма, которая позволяет пользователям вставлять элементы в базу данных. Я вызываю Scope_Identity(), чтобы вставить последнее значение идентичности. Это работает нормально. При вставке элемента passowrd генерируется случайным образом, который также сохраняется в моей базе данных. Мне также нужно получить этот пароль сразу после того, как элемент вставлен. Как мне это сделать?как получить данные элемента сразу после вставки
ответ
Выполнение запроса для получения пароля на основе идентификатора, который вы только что получили, вызывая Scope_Identity().
Какие технологии вы используете?
Спасибо за помощь. Я просто подумал, что может быть другой путь. – Anelim
псевдо-код:
insert into sometable
declare @ID int
set @ID = Scope_Identity()
select password from passwordtable where id = @ID
Предположительно, вы можете получить ссылку на новый пароль перед вставкой имеет место, которое я думаю, был бы лучший подход - это предотвратит необходимость делать вставки с последующим 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. Я игнорируя пункты о фактически как хранить пароли/не в виде обычного текста)
Если вы используете 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());
Вы делаете это внутри sp? –
Вы используете наборы данных? или 3-й участник DAL? –