sql输出子句错误

时间:2011-08-01 11:25:49

标签: sql sql-server clause

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”无法绑定。

2 个答案:

答案 0 :(得分:3)

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

From MSDN:

  

from_table_name

     

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

请注意,未提及INSERT

你必须

  • 如果您有SQL Server 2008 +
  • ,请尝试MERGE(我不能抱歉)
  • 使用另一列,稍后再加入。

答案 1 :(得分:0)

来自评论

  

它不起作用,因为你没有选择t2.id   SELECT语句。为了使它工作,你应该添加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