2010-02-10 4 views
0

J'ai un formulaire qui permet aux utilisateurs d'insérer des éléments dans la base de données. J'appelle Scope_Identity() pour obtenir la dernière valeur d'identité insérée. Cela fonctionne bien. Lors de l'insertion de l'élément, un mot de passe est généré de manière aléatoire, qui est également enregistré dans ma base de données. Je dois également récupérer ce mot de passe, immédiatement après l'insertion de l'élément. Comment puis-je faire cela?comment obtenir les données de l'article immédiatement après l'insertion

+0

Faites-vous cela dans un sp? –

+0

utilisez-vous des jeux de données? ou 3 e partie DAL? –

Répondre

0

Exécutez une requête pour obtenir le mot de passe en fonction de l'ID que vous venez de recevoir en appelant Scope_Identity().

Quelles technologies utilisez-vous?

+0

Merci pour votre aide. Je pensais juste qu'il pourrait y avoir un autre moyen. – Anelim

0

code pseudo:

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

On peut supposer que vous pouvez obtenir une référence au nouveau mot de passe avant l'insertion a lieu, que je pense serait la meilleure approche - cela empêcherait la nécessité de faire une INSERT suivie un SELECT pour lire le mot de passe - supprime la deuxième étape.

par exemple. pour générer un mot de passe, vous feriez utliser vous 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() 

seraient les paramètres de SORTIE @Pwd et @NewId (je ferais cela comme un sproc). OMI ce serait préférable de faire une lecture inutile si possible.

(NB. Je suis en ignorant les points autour vraiment comment stocker les mots de passe/pas dans le texte brut)

1

Si vous utilisez vous SQL Server 2008 peut utiliser la clause de sortie au lieu de l'identité de portée. Avec la clause de sortie, vous pouvez produire plus d'un champ. un exemple du code de livres en ligne:

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