sql输出子句错误

发布于 2024-11-27 07:35:16 字数 251 浏览 1 评论 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”。

t1 has an automatically generated primary key called pkId

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

Can someone please tell me why this doesn't work?

I'm getting the error The multi-part identifier "t2.id" could not be bound.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故事与诗 2024-12-04 07:35:16

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

来自 MSDN:

来自表名

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

请注意,未提及 INSERT

您必须

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

You can't get the values from t2 in the OUTPUT clause on INSERT (you can for UPDATE and DELETE).

From MSDN:

from_table_name

Is a column prefix that specifies a table included in the FROM clause of a DELETE, UPDATE, or MERGE statement that is used to specify the rows to update or delete.

Note that INSERT isn't mentioned

You'd have to

  • try MERGE (I can't sorry) if you have SQL Server 2008+
  • use another column and JOIN back later.
甜柠檬 2024-12-04 07:35:16

来自评论

它不起作用,因为您没有在您的
选择语句。为了使其工作,您应该将 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

From Comments

It doesn't work because you are not selecting t2.id in your
SELECT statement. To make it work, you should add t2.id to your
statement but that would also require you to INSERT this ID in t1 which
(I assume) is not what you need. I'm still pondering on how to resolve
that elegantly.

Not an elegant solution but the easiest might be to

  • Add a dummy t2ID column to t1
  • Alter your INSERT to include the t2ID (not using an OUTPUT clause)
  • Select all new values into your @IdTable
  • Remove the dummy column

SQL Script

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文