我有这个查询无法正常运行,但它显示了我想要实现的目标:
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)))
)
我想获取此insert语句生成的最后一个插入值,并将其传递给Output Inserted.UserID所在的位置。怎么办?
我可以通过在插入后选择@@ identity然后更新表中的密码列,分两步完成此操作。但如果可能的话,我很乐意一气呵成。
我的加密基于Microsoft的这篇文章。 http://technet.microsoft.com/en-us/library/ms179331.aspx 谢谢。
答案 0 :(得分:1)
在插入发生之前,OUTPUT子句没有Inserted。*的任何数据。您必须先执行插入。如果您尝试通过将INSERT嵌套到UPDATE或MERGE查询来解决此问题,SQL将给出一个它也不支持的错误。
一个选项是@@ identity,就像你说的那样。另一种方法是考虑使用SEQUENCE对象来定义UserID。在这种情况下,它的优势在于您可以在插入之前生成UserID,就像IDENTITY一样,不存在冲突的可能性。