0

t1 有一个自动生成的主键,称为pkId

INSERT INTO t1( title, summary)
OUTPUT inserted.pkId, t2.id INTO @IdTable(New_Id, Old_Id)
SELECT t2.title, t2.summary
FROM t2

有人可以告诉我为什么这不起作用吗?

我收到错误无法绑定多部分标识符“t2.id”。

4

2 回答 2

3

您无法在 INSERT 的 OUTPUT 子句中从 t2 获取值(可以用于 UPDATE 和 DELETE)。

来自 MSDN:

from_table_name

是一个列前缀,它指定包含在 DELETE、UPDATE 或 MERGE 语句的 FROM 子句中的表,该语句用于指定要更新或删除的行。

请注意,未提及 INSERT

你必须

  • 如果您有 SQL Server 2008+,请尝试MERGE(我很抱歉)
  • 使用另一列,稍后再加入。
于 2011-08-01T11:36:21.353 回答
0

来自评论

它不起作用,因为您没有在 SELECT 语句中选择 t2.id 。为了使它起作用,您应该将 t2.id 添加到您的语句中,但这也需要您在 t1 中插入此 ID,这(我假设)不是您需要的。我仍在思考如何优雅地解决这个问题。

不是一个优雅的解决方案,但最简单的可能是

  • 添加一个虚拟t2ID列到t1
  • 更改您INSERT以包括t2ID(不使用OUTPUT子句)
  • 选择所有新值到您的@IdTable
  • 删除虚拟列

SQL 脚本

ALTER TABLE t1 ADD COLUMN t2ID INTEGER NULL
GO

INSERT INTO t1( title, summary, t2ID)
SELECT t2.title, t2.summary, t2.ID
FROM t2

INSERT INTO @IdTable
SELECT pkID, t2ID
FROM   t1
WHERE  t2ID IS NOT NULL
GO

ALTER TABLE t1 DROP COLUMN t2ID
GO
于 2011-08-01T11:47:04.527 回答