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