0

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

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)))
    )

我想获取此插入语句生成的最后一个插入值,并将其传递到 Output Inserted.UserID 所在的位置。怎么可能呢?

我可以通过在插入后选择@@identity 然后更新表中的密码列来分两步执行此操作。但如果可能的话,我很想一口气做到这一点。

我的加密基于 Microsoft 的这篇文章。http://technet.microsoft.com/en-us/library/ms179331.aspx 谢谢。

4

1 回答 1

1

在插入发生之前,OUTPUT 子句没有任何 Inserted.* 数据。您必须先执行插入。如果您尝试通过将 INSERT 嵌套到 UPDATE 或 MERGE 查询中来解决它,SQL 将给出它也不支持的错误。

一种选择是@@identity,就像你说的那样。另一种是考虑使用 SEQUENCE 对象来定义 UserID。在这种情况下,它的优点是您可以在插入之前生成一个 UserID,并且就像 IDENTITY 一样,没有潜在的冲突。

于 2013-10-15T02:38:03.600 回答