我有一个允许用户在数据库中插入项目的表单。我调用Scope_Identity()来获取最后一个标识值。这没问题。插入项目时,会随机生成一个passowrd,它也会保存在我的数据库中。我也需要在插入项目后立即检索此密码。我该怎么做?
答案 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最好不要做不必要的阅读。
(注意:我忽略了关于实际如何存储密码/非纯文本的要点)