2010-02-10 76 views
0

我有一個允許用戶在數據庫中插入項目的表單。我調用Scope_Identity()來插入最後的標識值。這工作正常。當插入項目時,隨機生成的passowrd也保存在我的數據庫中。插入項目後,我也需要立即檢索此密碼。我該怎麼做呢?如何在插入後立即獲取項目數據

+0

你是在做一個sp嗎? – 2010-02-10 13:00:44

+0

你在使用數據集嗎?或第三方DAL? – 2010-02-10 13:02:02

回答

0

通過調用Scope_Identity(),根據剛剛收到的ID執行查詢以獲取密碼。

您使用的是什麼技術?

+0

感謝您的幫助。我只是認爲可能有另一種方式。 – Anelim 2010-02-10 13:10:35

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將OUTPUT參數(我做這個作爲一個存儲過程)。如果可能的話,海事組織會更喜歡做不必要的閱讀。

(NB。我忽略了點關於實際如何密碼/未明文存儲)

1

如果使用的是SQL Server 2008中您可以使用輸出條款的範圍,而不是身份。使用輸出子句,您可以輸出多個字段。來自Books在線的代碼的一個示例:

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