【问题标题】:How to use a table variable in an "update from select" query?如何在“从选择更新”查询中使用表变量?
【发布时间】:2012-01-22 01:12:34
【问题描述】:

我有这个表变量声明后跟一个查询:

DECLARE @CurrentItems TABLE
(
    ItemId uniqueidentifier,
    ItemUnits int
)

UPDATE U SET U.Units = U.Units + [@CurrentItems].ItemUnits
    FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;

U的定义如下:

CREATE TABLE [dbo].[U] (
    [UId]         UNIQUEIDENTIFIER UNIQUE NOT NULL,
    [Units]       INT DEFAULT ((0)) NOT NULL
);

当我在 SQL Management Studio 中针对 SQL Server 2005 Express 运行它时,我得到以下信息:

消息 208,第 16 级,状态 1,第 24 行

无效的对象名称“@CurrentItems”。

我已经浏览过thisthis 非常相似的问题,但不知道如何解决问题。

实际问题是什么,我该如何解决?

【问题讨论】:

  • UPDATE U SET U.Units = U.Units + CI.ItemUnits FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId; 有效,我已经试过了

标签: sql sql-server sql-server-2005 tsql table-variable


【解决方案1】:

您已将 @CurrentItems 别名为 CI,因此只需使用 CI

UPDATE U SET U.Units = U.Units + CI.ItemUnits
    FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;

还请查看您的查询,您有类似U.UId = CU.ItemID 的内容。什么是 CU?您已经使用 CI 为 @CurrentItems 创建了别名,那么 CU 的目的是什么?如果这是一个错误,请确保您将任何对CU 的引用更改为CI

你也不告诉我们U是什么,我希望这是一个有效的表格。

【讨论】:

  • @sharptooth 你完全删除了CU
  • 不幸的是,我使用了您的表定义并且无法重现它,它对我来说非常好。
  • 我的错 - 我忘记从表变量名中删除 []。在没有[] 的情况下工作。
  • @Sharptooth 您是否在正确的数据库上下文中运行它?您应该使用USE 关键字并指定您正在处理的数据库。 Use MyDB...
  • @sharptooth - 你应该复制粘贴我的代码 :) 你不需要 [] 在表变​​量中,因为它是别名。
猜你喜欢
  • 2019-10-07
  • 2016-08-20
  • 2012-11-25
  • 2023-03-28
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多