0

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

4

4 回答 4

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());
于 2010-02-10T14:27:47.323 回答
0

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

您正在使用哪些技术?

于 2010-02-10T13:01:06.673 回答
0

伪代码:

insert into sometable
declare @ID int  
set @ID = Scope_Identity()
select password from passwordtable where id = @ID
于 2010-02-10T13:03:48.803 回答
0

据推测,您可以在插入之前获得对新密码的引用,我认为这将是最好的方法 - 这将防止需要执行 INSERT,然后执行 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 参数(我会将其作为 sproc 执行)。如果可能的话,IMO 最好不要进行不必要的阅读。

(注意。我忽略了关于如何存储密码/不是纯文本的要点)

于 2010-02-10T13:13:31.503 回答