是否有任何方法可以在插入之前存储标识值,并在插入映射表之后立即存储新的标识值?映射表将用于更新其他表中的外键。
最初我认为这可以通过OUTPUT INTO子句实现,但只有插入的值是可插入的。我不确定如何单独使用OUTPUT子句来完成这项工作。也许是某种子查询?
也许这太复杂了,有一种方法可以使用SCOPE_IDENTITY和子查询来做到这一点。
非常感谢任何帮助。
P.S。是的,我知道我可以通过“保留”身份(插入虚拟行然后删除或DBCC CHECKINDENT)来解决这个问题,将新的“保留”身份和旧身份保存到映射表中,使用新身份更新表格,最后使用INSERT_IDENTITIES打开插件 - 但这很麻烦。
这适用于SQLServer 2008R2。
以下是不起作用的:
INSERT
[SomeTable]
OUTPUT
INSERTED.[Id],
[Id] -- This doesn't work
INTO
[#mappingTable]
SELECT
(SomeColumns)
FROM
[#someOtherTable];
答案 0 :(得分:0)
你事先无法知道身份是什么。
OUTPUT子句仅适用于您插入的表,而不适用于源表。我也希望如此:会很有用。
因此,您只能重新查询INSERTed表(如下所示)或UPDATE #mappingTable
INSERT
[SomeTable]
SELECT
(SomeColumns)
FROM
[#someOtherTable];
SELECT
ID, stuff
FROM
SomeTable
答案 1 :(得分:0)
可以使用MERGE语句和OUTPUT子句来完成。太糟糕了,没有人回答这个信息,我的同事告诉了我。