选择@@identity,同时插入可能



我有这个查询无法正常运行,但它显示了我想要实现的目标:

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一样,没有冲突的可能性。

最新更新