我有这个查询无法正常运行,但它显示了我想要实现的目标:
INSERT INTO Table1
(first_name, last_name, email, password_encrypt)
VALUES
(
@first_name,@last_name,@email,
EncryptByKey(Key_GUID('CertificateName'), @password_encrypt, 1, HashBytes('SHA1', CONVERT( varbinary, Output Inserted.UserID)))
)
我想获取此插入语句生成的最后一个插入值,并将其传递到输出插入.UserID 所在的位置。怎么能做到这一点呢?
我可以通过在插入后选择@@identity然后更新表中的密码列来分两步执行此操作。但如果可能的话,我很想一次性做到这一点。
我的加密基于Microsoft http://technet.microsoft.com/en-us/library/ms179331.aspx 的这篇文章谢谢。
OUTPUT 子句在插入发生之前没有任何 Inserted.* 的数据。您必须先执行插入。如果您尝试通过将 INSERT 嵌套到 UPDATE 或 MERGE 查询中来解决此问题,SQL 将给出一个错误,指出它也不支持该查询。
一种选择是@@identity就像你说的那样。另一种方法是考虑使用 SEQUENCE 对象来定义用户 ID。在这种情况下,它的优点是您可以在插入之前生成用户ID,并且就像IDENTITY一样,没有冲突的可能性。