插入后如何立即获取项目数据

时间:2010-02-10 12:57:49

标签: .net database scope-identity

我有一个允许用户在数据库中插入项目的表单。我调用Scope_Identity()来获取最后一个标识值。这没问题。插入项目时,会随机生成一个passowrd,它也会保存在我的数据库中。我也需要在插入项目后立即检索此密码。我该怎么做?

4 个答案:

答案 0 :(得分:1)

如果您使用的是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());

答案 1 :(得分:0)

执行查询以根据您刚刚通过调用Scope_Identity()收到的ID获取密码。

您使用的是哪些技术?

答案 2 :(得分:0)

伪代码:

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

答案 3 :(得分:0)

据推测,你可以在插入之前获得对新密码的引用,我认为这是最好的方法 - 这样可以防止需要执行INSERT,然后选择SELECT来读取密码 - 删除第二个步骤

e.g。 假设您使用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)。如果可能的话,IMO最好不要做不必要的阅读。

(注意:我忽略了关于实际如何存储密码/非纯文本的要点)